繁体   English   中英

我如何确定“插入输出”的顺序正确?

[英]How do I make sure OUTPUT INSERTED is in correct order?

比方说,我有这个@TempTable只有2列ProductNameTempID

ProductName | TempID  
------------+------
GTX 1080    | NULL
GTX 1080Ti  | NULL
RX 580      | NULL

我将使用以下命令将其插入TblProduct (2列: ProductNameID ):

INSERT INTO TblProduct (ProductName)
OUTPUT INSERTED.ID INTO @Test123(ID)
    SELECT ProductName 
    FROM @TempTable

是否可以确保@Test123中的输出结果顺序正确? 表示如果结果是1、2和3。

  • 1应参考GTX 1080
  • 2应参考GTX 1080Ti
  • 3应该参考RX 580

是否可以从@Test123 ID更新TempID中的@TempTable 如果是,怎么办? 我在想类似UPDATE ... SELECT ...

不,完全不能保证。
关系数据库中的表不是按性质排序的,换句话说,记录没有固有的顺序。

但是,您可以使用output子句输出多个列,因此对于示例数据,您可以同时输出ProductNameID (当然,这意味着表变量@Test123必须(至少)具有这两列):

INSERT INTO TblProduct (ProductName)
OUTPUT INSERTED.ID, INSERTED.ProductName INTO @Test123(ID, ProductName)
SELECT ProductName 
FROM @TempTable

您可以在rextester上观看现场演示

如果要使行按字母顺序显示(如您的示例),请说:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM