【问题标题】:How to use input parameters in sp_executesql from other stored procedure如何在 sp_executesql 中使用来自其他存储过程的输入参数
【发布时间】: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


【解决方案1】:

您需要将@Param2 传递给sp_ExecuteSQL: 检查sp_ExecuteSQL上的正确语法

EXEC sp_ExecuteSQL @sql, N'@Param2 NVARCHAR(20)', @Param2

【讨论】:

  • 感谢您的回答,但@param1 也用于相同的WHERE clause。在我这样做之后,现在我得到了同样的错误 @param1: Must declare the scalar variable @param1 我试过了:EXEC sp_executesql @sql, N'@param2 NVARCHAR(20)', @param2, N'@param1 INT', @param1
  • 语法不正确,请检查链接文章的语法是否正确。 sp_executesql @sql, N'@param2 NVARCHAR(20), @param1 INT', @param2, @param1
  • 谢谢,但这与 WHERE clause 冲突,在我的 where 子句中是行:WHERE FF.Id = EE.Id AND ... AND FF.UserId = @param1 AND (FF.UserName = @param2 OR @param2 = '')
  • 我收到以下错误:(Conversion failed when converting the varchar value ') FF.UserName = @param2 OR @param2 = ' to datatype INT
  • 我正在尝试执行:EXEC sp_Example @param1 = 1, @param2 = ''
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-26
相关资源
最近更新 更多