Sql server 如何显示动态插入值的临时表

Sql server 如何显示动态插入值的临时表,sql-server,tsql,temp-tables,Sql Server,Tsql,Temp Tables,基本上,我有一个TSQL,它在数据库的所有表中查找一个条件,并尝试将记录插入这个临时表中。我很难在执行结束时显示此临时表#TEMP1 OPEN MyCursor; FETCH NEXT FROM MyCursor INTO @Table WHILE @@FETCH_STATUS = 0 BEGIN set @SQL = N'IF EXISTS(select 1 from Prod.' + @Table + ' where usedDate IS NULL)' + 's

基本上,我有一个TSQL,它在数据库的所有表中查找一个条件,并尝试将记录插入这个临时表中。我很难在执行结束时显示此临时表#TEMP1

OPEN MyCursor;
FETCH NEXT FROM MyCursor INTO @Table
   WHILE @@FETCH_STATUS = 0 BEGIN 
        set @SQL = N'IF EXISTS(select 1 from Prod.' + @Table + ' where usedDate IS NULL)' + 
 'select ''' + @Table + ''' as TableName,* INTO #TEMP1 from Prod.' + @Table + ' WHERE usedDate IS NULL '

 EXECUTE sp_executesql @SQL
 FETCH NEXT FROM MyCursor INTO @Table
END;
CLOSE MyCursor;
DEALLOCATE MyCursor;
而不是中的#TEMP1

'select ''' + @Table + ''' as TableName,* INTO #TEMP1 from Prod.' + @Table + ' WHERE usedDate IS NULL '
您可以将全局temp##TEMP1表用作

'select ''' + @Table + ''' as TableName,* INTO ##TEMP1 from Prod.' + @Table + ' WHERE usedDate IS NULL '
但请注意,如果游标迭代,这将失败,因为您不能多次插入到表中

为了解决这个问题

@Table的值连接到##TEMP1

或者在下一次迭代之前,删除表##TEMP1

,因为#temp是在动态SQL中创建的,所以只能在该范围内访问它