如何使用来自其他存储过程的 sp_executesql 中的输入参数
How to use input parameters in sp_executesql from other stored procedure
我有存储过程 sp_Example
,输入参数 @param1 @param2
等。在 sp_Example
存储过程中,我正在使用 dynamic query
并通过调用 [=16= 返回结果]. sp_executesql
执行后,它无法看到 sp_Example
的参数,我收到以下错误:Must declare the scalar variable @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
我有存储过程 sp_Example
,输入参数 @param1 @param2
等。在 sp_Example
存储过程中,我正在使用 dynamic query
并通过调用 [=16= 返回结果]. sp_executesql
执行后,它无法看到 sp_Example
的参数,我收到以下错误:Must declare the scalar variable @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