尝试使用 sp_Executedsql 将结果选择到临时表 #TempTable 中。 无论其是否成功插入,都会有消息输出,如 (359 行记录受影响) ,这意味着插入成功吗? 以下是脚本:
DECLARE @Sql NVARCHAR(MAX);
SET @Sql = 'select distinct Coloum1,Coloum2 into #TempTable
from SPCTable with(nolock)
where Convert(varchar(10), Date_Tm, 120) Between @Date_From And @Date_To';
SET @Sql = 'DECLARE @Date_From VARCHAR(10);
DECLARE @Date_To VARCHAR(10);
SET @Date_From = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120)+''';
SET @Date_To = '''+CONVERT(VARCHAR(10),DATEADD(d,DATEDIFF(d,0,GETDATE()),0)-1,120)+''';
'+ @Sql;
EXECUTE sp_executesql @Sql;
执行完后,它返回了一条消息(影响了359行)。
接下来,当尝试从#TempTable中选择数据时。Select * From #TempTable;
它会返回给我:
Msg 208, Level 16, State 0, Line 2
Invalid object name '#TempTable'.
怀疑只有“select”部分在工作,插入操作没有生效。如何解决?
DECLARE @sql NVARCHAR(MAX); SET @sql = 'SELECT @@SPID'; EXECUTE sp_executesql @sql; SELECT @@SPID
- Tom HunterINSERT INTO @tmpTbl EXEC sp_executesql @sql
- Mark Entinghsp_executesql
不会创建自己的会话,而是创建自己的批处理(或执行上下文)。临时表可以被同一会话中的其他批处理看到。但是,由于它们在创建它们的批处理退出时被删除,实际上只能被从属批处理看到(即由创建临时表的同一上下文创建的执行上下文)。 - RBarryYoung