我需要在一个临时表中插入多个Table变量。
其中一个表变量是:
DECLARE @@TempTable_Number TABLE (Number bigint)
insert into @@TempTable_Number (Number) values ('000000000000');
insert into @@TempTable_Number (Number) values ('100000000000');
这适用于只插入一个表变量
select * into ##GlobalTempTable_1 from @@TempTable_Number
我还有几个表变量,比如
DECLARE @@TempTable_ID TABLE (Number int)
insert into @@TempTable_ID (ID) values ('1');
insert into @@TempTable_ID (ID) values ('12');
等...
我尝试将多个表变量中的数据插入一个TempTable:
Select * into ####GlobalTempTable_1 From @@TempTable_ID, @@TempTable_Number;
查询进入连续循环......
修改
其中一个表变量是:
DECLARE @@TempTable_Number TABLE (Number bigint, ID int)
insert into @@gvTempTable (Number) values ('21212321332332');
insert into @@gvTempTable (Number) values ('100000000000');
insert into @@gvTempTable (ID) values ('1');
insert into @@gvTempTable (ID) values ('12');
select * into ##GlobalTempTable from @@gvTempTable;
select * from ##GlobalTempTable;
这会返回一种笛卡尔积
答案 0 :(得分:3)
使用UNION ALL
:
SELECT ID
INTO ##GlobalTempTable_1
FROM @@TempTable_ID
UNION ALL
SELECT Number
FROM @@TempTable_Number;
的 LiveDemo
强>
Select * into ####GlobalTempTable_1 From @@TempTable_ID, @@TempTable_Number;
查询进入连续循环...
可能不是循环但是很长的查询。请注意,您执行Cartesian product
。
所以你的查询与:
相同SELECT *
INTO ##GlobalTempTable_1
FROM @@TempTable_ID
CROSS JOIN @@TempTable_Number;
结果是NxM
条记录,其中N
是第一个表中的记录数,M
是第二个表中的记录数。
答案 1 :(得分:0)
试试这个,
DECLARE @TempTable TABLE (
ID INT
,Number BIGINT
)
INSERT INTO @TempTable (Number)
VALUES ('21212321332332');
INSERT INTO @TempTable (Number)
VALUES ('100000000000');
INSERT INTO @TempTable (ID)
VALUES ('1');
INSERT INTO @TempTable (ID)
VALUES ('12');
--select * into #GlobalTempTable from @@gvTempTable;
--select * from ##GlobalTempTable;
SELECT *
FROM @TempTable
SELECT A.ID
,B.Number
FROM (
SELECT ID
,ROW_NUMBER() OVER (
ORDER BY ID
) TempId
FROM @TempTable
WHERE id IS NOT NULL
) A
INNER JOIN (
SELECT number
,ROW_NUMBER() OVER (
ORDER BY id
) TempId
FROM @TempTable
WHERE number IS NOT NULL
) B ON A.TempId = B.TempId