![](/img/trans.png)
[英]How to make sure that all the rows are inserted into datamodel and then truncate staging table
[英]How do I make sure OUTPUT INSERTED is in correct order?
比方说,我有这个@TempTable
只有2列ProductName
和TempID
:
ProductName | TempID
------------+------
GTX 1080 | NULL
GTX 1080Ti | NULL
RX 580 | NULL
我将使用以下命令将其插入TblProduct
(2列: ProductName
和ID
):
INSERT INTO TblProduct (ProductName)
OUTPUT INSERTED.ID INTO @Test123(ID)
SELECT ProductName
FROM @TempTable
是否可以确保@Test123
中的输出结果顺序正确? 表示如果结果是1、2和3。
是否可以从@Test123
ID
更新TempID
中的@TempTable
? 如果是,怎么办? 我在想类似UPDATE ... SELECT ...
不,完全不能保证。
关系数据库中的表不是按性质排序的,换句话说,记录没有固有的顺序。
但是,您可以使用output子句输出多个列,因此对于示例数据,您可以同时输出ProductName
和ID
(当然,这意味着表变量@Test123
必须(至少)具有这两列):
INSERT INTO TblProduct (ProductName)
OUTPUT INSERTED.ID, INSERTED.ProductName INTO @Test123(ID, ProductName)
SELECT ProductName
FROM @TempTable
如果要使行按字母顺序显示(如您的示例),请说:
select ProductName
from TblProduct
order by ProductName;
如果需要其他顺序,则需要定义该顺序的列,以便可以在select语句上放置适当的顺序。 例如,如果要按插入顺序返回行,则将表定义为:
create table TblProduct
(
id int identity(1,1) not null,
ProductName varchar(20),
tempID int
);
然后
select ProductName
from TblProduct
order by id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.