在sql中创建动态临时表



是否有创建动态临时表的方法。下面的sql代码声明了一个变量@tic。我计划将表1中的内容插入到临时表#df中。因此,我不是直接给出#df,而是作为一个变量传递。但下面的代码并不成功。有人能帮我吗?

declare @tic as varchar(100) = 'df'
select *
into '#' + @tic from (
select * from [dbo].[table1])
select * from #df

有办法吗?好吧,我认为答案是";是和否,也许"。

据我所知,使用本地临时表是无法做到这一点的。正如Stu在评论中解释的那样,您需要动态SQL来定义表名,然后该表在外部范围内将不可见,因为它是一个本地临时表。

";是";是因为一种类型的临时表是全局临时表。这些表在不同的作用域中保持不变。并且使用##而不是#作为前缀来定义它们。所以这是有效的:

declare @tic as varchar(100) = 'df'
declare @sql nvarchar(max);
set @sql = 'select * into ##' + @tic + ' from table1';
select @sql;
exec sp_executesql @sql;
select * from ##df;

(这是一把db<>小提琴。(

";也许";是因为我很怀疑你是否真的需要这个。动态表名在SQL系统中很少有用,正是因为它们依赖于动态SQL。在SQL中引入动态名称(无论是列还是表(是危险的,这既是因为SQL注入的危险,也是因为它可能引入难以调试的语法错误。

如果您试图解决一个真正的问题,可能有更适合SQL Server的替代方法。

最新更新