使用参数执行2个动态SQL Server存储过程,并将结果与​​UNION ALL结合使用

时间:2014-07-21 12:55:10

标签: sql sql-server sql-server-2008 vba stored-procedures

是否可以UNION ALL 2个带参数的动态存储过程?

我已经看到了组合2个没有参数的动态存储过程的答案,但找不到有传递参数的语法。

以下是我的例子:

CREATE PROCEDURE [dbo].[SLACTIVITY_SP]
   @ORGCODE AS VARCHAR(6),
   @COMPANYID AS VARCHAR(6)
AS 
BEGIN 
    SET NOCOUNT ON;

    DECLARE @SQL1 NVARCHAR(MAX);
    DECLARE @SQL2 NVARCHAR(MAX);
    DECLARE @SQLRESULT NVARCHAR(MAX);

    SET @SQL1 = N'SELECT * 
                  FROM TABLE' + @ORGCODE + '
                  WHERE TABLE' + @ORGCODE + '.Column1 = 1 
                    AND TABLE' + @ORGCODE + '.Column2 = @COMPANYID;';

    SET @SQL2 = N'SELECT * 
                  FROM TABLE' + @ORGCODE + '
                  WHERE TABLE' + @ORGCODE + '.Column1 = 0 
                    AND TABLE' + @ORGCODE + '.Column2 = @COMPANYID;';

--usually I write this for a single dynamic SP with parameters
EXEC sp_executesql @SQL1, N'@ORGCODE VARCHAR(6),@COMPANYID AS VARCHAR(6)', @ORGCODE, @COMPANYID; 

但我不知道如何使用参数创建一个EXEC。

会是这样的吗?

SET @SQLRESULT + @SQL1 + 'UNION ALL ' + @SQL2
EXEC @SQLRESULT, N'ORGCODE VARCHAR(6), @COMPANYID AS VARCHAR(6)', @ORGCODE, @COMPANYID;

我还尝试在单个存储过程中使用UNION ALL进行一次查询。如果过程不是动态的,则此方法有效。但是只要我将它变为动态,就会出现各种奇怪的错误信息。

1 个答案:

答案 0 :(得分:0)

为什么不

SET @SQL1 = N'SELECT * 
              FROM TABLE' + @ORGCODE + '
              WHERE TABLE' + @ORGCODE + '.Column1 IN (0, 1) 
              AND TABLE' + @ORGCODE + '.Column2 = @COMPANYID;';