使用参数从动态SQL创建临时表



这是我的问题。我需要在执行动态SQL并传递参数后创建一个临时表,如下所示

CREATE PROCEDURE SP1
@param1 varchar(50),
@param2 varchar(50)
AS
BEGIN
DECLARE @PDef varchar(300)
DECLARE @sql  varchar(300)
DECLARE @localparam1 varchar(300)
DECLARE @localparam2 varchar(300)
SET @localparam1 = ....
SET @localparam2 = ....

SET @PDef = '@param1 varchar(50), @localparam1 varchar(300)'
SET @sql = 'SELECT * FROM TABL1 WHERE COL1 = @param1, COL2 in (@localparam1)'

EXEC sp_Executesql @sql, @PDef, 
@param1 = @param1, @localparam1 = @localparam1

以上工作。如何将结果放入临时表?

我试过

CREATE TABLE #T1 (col1 varchar(50), col2 varchar(50) )
INSERT INTO #T1 
EXECUTE @sql    -- didn't work    
INSERT INTO #T1 
EXECUTE (@sql, @PDef, @param1 = @param1, @localparam1 = @localparam1)   -- didn't work either

编辑:在使用EXECUTE时查看了以下示例动态SQL结果进入SQL存储过程中的临时表,因此使用EXECUTE公认的答案是:INSERT到#T1 execute('execute'+@SQLString(如果sql字符串不是过程,则省略"execute">

现在看看对已接受答案的评论,即已接受答案:-(

由于某种原因,您已经从查询中删除了sp_executesql。如果不告诉SQL Server:,则无法调用sys.sp_executesql

INSERT INTO #T1
EXECUTE sys.sp_executesql @sql;
INSERT INTO #T1
EXECUTE sys.sp_executesql @sql,
@PDef,
@param1 = @param1,
@localparam1 = @localparam1;

最新更新