【发布时间】:2022-01-07 03:14:39
【问题描述】:
这是我的问题。我需要在执行动态 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 时查看了以下示例 Dynamic SQL results into temp table in SQL Stored procedure 并因此使用了 EXECUTE 接受的答案是: 插入 #T1 执行 ('execute' + @SQLString ) 如果 sql 字符串不是过程,则省略 'execute'
现在查看接受答案的问题的 cmets :-)
【问题讨论】:
-
您从
EXEC声明中删除了sp_Executesql。由于印刷错误投票结束。 -
使用 sp_Executesql 不起作用。
-
不过,你为什么要在这里使用动态 SQL?你的陈述没有任何动态。
COL2 in (@localparam1)也不太可能与您认为的有关;相当于COL2 = @localparam1。 -
insert into #T1 execute sys.sp_Executesql @sql没用? “没用”是什么意思?你收到错误了吗?出乎意料的结果?还有什么? -
使用时出错-插入#T1执行sys.sp_Executesql @SQL 它正在寻找参数-“必须声明标量变量..”
标签: sql-server dynamic-sql temp-tables