我有一个包含大约20列的表变量。我想基本上为2个不同的结果集重用单个表变量结构。 2个结果集应该用不同的表变量表示,这样我就不能重用单个表变量。因此,我想知道是否有办法克隆单个表变量以供重用。例如,像这样:
DECLARE @MyTableVar1 TABLE(
Col1 INT,
Col2 INT
}
DECLARE @MyTableVar2 TABLE = @MyTableVar1
如果我可以重用现有的SQL,我想避免创建重复的SQL。
答案 0 :(得分:4)
这是不可能的,请改用临时表
if object_id('tempdb..#MyTempTable1') is not null drop table #MyTempTable1
Create TABLE #MyTempTable1 (
Col1 INT,
Col2 INT
)
if object_id('tempdb..#MyTempTable2') is not null drop table #MyTempTable2
select * into #MyTempTable2 from #MyTempTable1
更新:
正如Eric在评论中所建议的那样,如果您只是寻找表模式而不是第一个表中的数据,那么
select * into #MyTempTable2 from #MyTempTable1 where 1 = 0
答案 1 :(得分:2)
您可以创建用户定义的表类型,通常用于为存储过程使用表值参数。创建类型后,您可以将其用作类型来声明任意数量的表变量,就像内置类型一样。这最接近你的要求。
例如:
CREATE TYPE MyTableType AS TABLE
( COL1 int
, COL2 int )
DECLARE @MyTableVar1 AS MyTableType
DECLARE @MyTableVar2 AS MyTableType
此解决方案需要注意的一些事项
答案 2 :(得分:1)
您可以使用临时表并选择...因为统计数据更好,所以效果更好。
create table #myTable(
Col1 INT null,
Col2 INT null
}
...
select *
into #myTableTwo
from #myTable
答案 3 :(得分:0)
您可以在表中创建一个表变量并添加type列,并使用查询中的type列来过滤数据。
通过这种方式,您使用一个表来保存多种类型的数据。 希望这会有所帮助。
declare @myTable table(
Col1 INT null,
Col2 INT null,
....
Type INT NULL
}
insert into @myTable(...,type)
select ......,1
insert into @myTable(...,type)
select ......,2
select * from @myTable where type =1
select * from @myTable where type =2