【发布时间】:2015-02-05 06:49:15
【问题描述】:
我有存储过程sp_Example 和输入参数@param1 @param2 等。在sp_Example 存储过程中我使用dynamic query 并通过调用sp_executesql 返回结果。一旦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
有什么办法解决吗?
【问题讨论】:
-
应该与 MySQL 和 MS SQL Server 一起使用?
-
它基于SQL server。
-
您尝试在设置
@sql的位置使用N'?如果我没记错的话,我认为使用Sp_executesql几乎是一个要求。 -
感谢您的评论,如果您的意思是 `SET @sql = N'SELECT * FROM ` 这没有帮助。
标签: mysql sql sql-server stored-procedures parameters