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

Вызов СП в другое СП, присвоить значение (выход внутреннего СП) переменной (переменной наружная СП)


Привет,

Я хотел бы использовать вывод SP, чтобы назначить его переменной другого SP, как здесь, я хочу, чтобы вывод GetLinage SP был назначен @linage в InsertLog SP, но ошибка, которую я получаю, заключается в том, что,
Procedure or function GetLinage has too many arguments specified.


Я не знаю, если то, что я ошибиться,


EXEC InsertLog 'MenuItem78', 'thisrout', 'thisbutton', '2000-01-01 00:00:00' , 123

ALTER PROCEDURE 
InsertLog(
	@formName nvarchar,
	@buttonRout nvarchar,
	@buttonName nvarchar,
	@clickDateTime DateTime,
	@userCode bigint
	)

AS
BEGIN

DECLARE
@linage nvarchar
EXEC GetLinage @formName, @linage  OUTPUT



INSERT INTO 
LogTable(
	FormName,
	Linage,
	ButtonRout,
	ButtonName,
	ClickDateTime,
	UserCode
	)
VALUES(
	@formName,
	@linage,
	@buttonRout,
	@buttonName,
	@clickDateTime,
	@userCode
	)

END
GO


GetLinage SP выглядит следующим образом:

CREATE PROCEDURE GetLinage (@formname nvarchar)
AS

SELECT Linage
FROM formslist
WHERE (formslist.Formname = @formname)


GO


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

Я работаю над этим и другими различными способами для этого. но все же знаю ответ.

The Praveen Singh

вы не можете передать значение в выходной параметр

2 Ответов

Рейтинг:
1

Sql Decoder

Проверьте ниже Решение. Поэтому вам не нужно менять логику во внутреннем SP.

Примечание: Это решение будет работать только в том случае, если
1. внутренний SP не содержит нижеприведенного утверждения
2. Это даст значение только 1 строку, даже СП возвращает несколько строк.

Insert Into #Table
EXEC ....


Скрипт:
Alter PROCEDURE InsertLog
(
	@formName nvarchar,
	@buttonRout nvarchar,
	@buttonName nvarchar,
	@clickDateTime DateTime,
	@userCode bigint
)
 
AS
BEGIN
 
DECLARE @linage nvarchar(30)
Create Table #Result (linage nvarchar(30))

Insert Into #Result
EXEC #GetLinage @formName--, @linage  OUTPUT
 
Select @linage = linage From #Result

INSERT INTO 
LogTable(
	FormName,
	Linage,
	ButtonRout,
	ButtonName,
	ClickDateTime,
	UserCode
	)
Select	@FormName, @Linage, @ButtonRout, @ButtonName, @ClickDateTime, @UserCode


Рейтинг:
0

hypermellow

Привет,

Вы не возвращаете значение из своей 2-й процедуры.
Попробуйте изменить его на что-то вроде:

ALTER PROCEDURE GetLinage (
    @formname nvarchar,
    @linage  nvarchar OUTPUT
)
AS
 
SELECT @linage = Linage
FROM formslist
WHERE (formslist.Formname = @formname)

GO


..- надеюсь, это поможет.


m.r.m.40

Спасибо, но это не работает.

hypermellow

Есть какие-нибудь подробности о том, где он не работает?
.. у вас есть сообщение об ошибке?