Sql 将表变量插入具有多列(ID、编号等)的临时表中
我需要在一个临时表中插入多个表变量 表变量之一是:Sql 将表变量插入具有多列(ID、编号等)的临时表中,sql,sql-server,global-variables,temp-tables,Sql,Sql Server,Global Variables,Temp Tables,我需要在一个临时表中插入多个表变量 表变量之一是: DECLARE @@TempTable_Number TABLE (Number bigint) insert into @@TempTable_Number (Number) values ('000000000000'); insert into @@TempTable_Number (Number) values ('100000000000'); DECLARE @@TempTable_Number TABLE (Number
DECLARE @@TempTable_Number TABLE (Number bigint)
insert into @@TempTable_Number (Number) values ('000000000000');
insert into @@TempTable_Number (Number) values ('100000000000');
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;
这只适用于插入一个表变量
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');
等等
我尝试将多个表变量中的数据插入到一个表变量中:
Select * into ####GlobalTempTable_1 From @@TempTable_ID, @@TempTable_Number;
查询进入一个连续循环
编辑:
表变量之一是:
DECLARE @@TempTable_Number TABLE (Number bigint)
insert into @@TempTable_Number (Number) values ('000000000000');
insert into @@TempTable_Number (Number) values ('100000000000');
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;
这将返回一种笛卡尔乘积
使用
联合所有人
:
SELECT ID
INTO ##GlobalTempTable_1
FROM @@TempTable_ID
UNION ALL
SELECT Number
FROM @@TempTable_Number;
查询进入一个连续循环 它可能不是循环,而是非常长的查询。请记住,您使用的是
笛卡尔积
因此,您的查询与以下内容相同:
SELECT *
INTO ##GlobalTempTable_1
FROM @@TempTable_ID
CROSS JOIN @@TempTable_Number;
结果是NxM
记录,其中N
是第一个表中的记录数,而M
是第二个表中的记录数 像这样试试
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
你的例子很奇怪。首先存储
bigint/int
,但提供字符串。没什么大不了的(隐式转换将处理它)。第二,您的@@u ID
在语句中插入的无效(列名编号ID
)。这是一个打字错误,我不想在第二列中使用ID。我更新了我的问题,再次感谢。请不要像您那样编辑问题,因为您使现有答案无效。如果要添加澄清,请清楚地标记。第二,你的编辑是一个新问题,应该单独提问。谢谢你的回答。但它产生的结果与我预期的不同。我修改了上一个查询,结果非常接近,但不是100%。我做了以下操作:声明@@TESTERABLE TABLE(Number bigint,ID int)插入到@@GVTESTERABLE(Number)值('00000000000000');插入到@gvTestable(数字)值('00000000000012');插入到@gvTestable(ID)值('1');插入到@gvTestable(ID)值('12');选择*into##TENTABLE From@@GVTENTABLE结果集仍然返回两列笛卡尔乘积,但我需要它将ID和数字作为一行返回,而不是为所有ID返回空值,然后分别为所有数字返回空值。