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返回空值,然后分别为所有数字返回空值。