这是我的问题。我需要在执行动态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;