如何确保OUTPUT INSERTED的顺序正确?

时间:2017-12-28 10:11:54

标签: sql sql-server

我们说这个@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

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

之类的东西

2 个答案:

答案 0 :(得分:2)

不,它根本没有保证。
关系数据库中的表本质上是未排序的 - 换句话说 - 记录没有固有的顺序。

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

@Test123

You can see a live demo on rextester

答案 1 :(得分:1)

如果您希望行按字母顺序显示,请在示例中说:

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;