如何使用来自其他存储过程的 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