是否可以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进行一次查询。如果过程不是动态的,则此方法有效。但是只要我将它变为动态,就会出现各种奇怪的错误信息。
答案 0 :(得分:0)
为什么不
SET @SQL1 = N'SELECT *
FROM TABLE' + @ORGCODE + '
WHERE TABLE' + @ORGCODE + '.Column1 IN (0, 1)
AND TABLE' + @ORGCODE + '.Column2 = @COMPANYID;';