m.r.m.40 Ответов: 1

Назначение выходных данных хранимой процедуры переменной другого SP внутри второго SP


Привет,
Я использую sql server и должен выполнить следующие процедуры:

--InsertLog
CREATE PROCEDURE 
InsertLog(
	@menuName nvarchar(500),
	@buttonName nvarchar(500),
	@buttonText nvarchar(500),
	@buttonPath nvarchar(500),
	@buttonCaptionPath nvarchar(500),
	@clickDateTime DateTime,
	@UserID nvarchar(500)-- Gets 7 items
	)
AS
BEGIN
DECLARE @linage nvarchar(500)
SET @linage = 
EXEC GetLinage @menuName,@linage
INSERT INTO 
LogTable(
	GUID,
	FormName,
	Linage,
	ButtonPath,
	ButtonCaptionPath,
	ButtonName,
	ButtonText,
	ClickDateTime,
	UserID 
	)
VALUES(
	newid(),
	@menuName,
	@linage,
	@buttonPath,
	@buttonCaptionPath,
	@buttonName,
	@buttonText,
	@clickDateTime,
	@UserID 
	)-- Saves 8 Items
END
GO


--GetLinage 
CREATE PROCEDURE GetLinage (
    @formidentity nvarchar(200),
    @linage  nvarchar(200) OUTPUT
)
AS
SELECT @linage = Linage
FROM formslist
WHERE (formslist.formID = @formidentity)
GO


Значение, которое должен возвращать (или возвращает) SP GetLinage, не присваивается переменной в InsertLog.

Я не могу понять, почему это не работает, хотя я ищу и пробую разные способы заставить это работать.

Что я уже пробовал:

Я работаю над этим, но пока не нашел хорошего решения.

1 Ответов

Рейтинг:
7

Richard Deeming

Во-первых, вы упускаете OUTPUT модификатор параметра при вызове процедуры.

Во-вторых, вы затем перезаписываете переменную с возвращаемым значением хранимой процедуры. С тех пор как ваш GetLinage процедура не включает в себя никаких Return операторы, возвращаемое значение равно 0.

Снять SET @linage = часть, и добавить OUTPUT модификатор:

DECLARE @linage nvarchar(500);
EXEC GetLinage @menuName, @linage = @linage OUTPUT;


m.r.m.40

Спасибо,