我有带有输入参数@param1 @param2
等的存储过程sp_Example
。在sp_Example
存储过程中我使用dynamic通过调用
并返回结果。执行 sp_executesql
进行查询sp_executesql
后,它无法看到 sp_Example
中的参数,并且出现以下错误:必须声明标量变量 @param2
这是我的 sp_Example
的示例:
CREATE PROCEDURE sp_Example
@param1 INT,
@param2 NVARCHAR(20) = ''
AS
BEGIN
IF (@param1 = 1)
BEGIN
-- There doesn't matter how select looks like so I pass dots
SELECT @cols += .... + ','
FROM (SELECT ....
FROM ....
WHERE ....
) a
SET @cols = LEFT(@cols, LEN(@cols) - 1)
SET @sql = 'SELECT * FROM
(
SELECT ....
FROM ....
WHERE FI.test = @param2 -- Here I'm trying to get input parameter
-- @param2 from sp_Example
) x
PIVOT
(
MIN (Val)
FOR NamePiv IN (' + @cols + ')
) p'
EXEC Sp_executesql @sql -- This one is IMPORTANT row
-- When this executed I got error:
-- That must declare scalar variable @param2
END
...
END
有什么解决办法吗?
最佳答案
您需要将 @Param2
传递给 sp_ExecuteSQL
,如下所示:
检查 sp_ExecuteSQL 上的语法是否正确
EXEC sp_ExecuteSQL @sql, N'@Param2 NVARCHAR(20)', @Param2
关于mysql - 如何在 sp_executesql 中使用来自其他存储过程的输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28337790/