我正在将数据插入两个表中。在每个插入中,都有一个到#temp表的输出,每个输出都有一个标识列。为每个插入生成数据的选择的顺序相同。稍后,我通过“标识”列连接两个#temp表。我希望的是,身份标识列号将按照插入时在两侧指定的顺序排列。似乎每隔一段时间,这些数字就不匹配了,我唯一能想到的是,当将OUTPUT数据写入临时表时,OUTPUT可能并不总是遵循select语句中的顺序。
CREATE TABLE #TempTable
(
RowNumber Integer IDENTITY (1,1) NOT NULL,
TableID Integer
CONSTRAINT PK_TableID PRIMARY KEY NONCLUSTERED (RowNumber)
)
INSERT INTO Table
(column1,column2,column3,etc)
OUTPUT
INSERTED.ID
INTO #TempTable
(ID)
SELECT
column1,column2,column3,etc
FROM
Other table
ORDER BY
SourceFlag,
StoreID,
storenumber,
EstablishDate,
TableID
我希望这些语句将以相同的1到25顺序在两个语句中插入25行。然后,我应该能够基于行号1 = 1、25 = 25等连接。为了获得匹配的数据。我认为正在发生的事情是以某种方式弄乱了顺序,因此第一个插入的第1行确实与第二个插入的第14行匹配,因此当我后来以1对1的方式加入时,会得到不匹配的数据。>
答案 0 :(得分:2)
显然,it doesn't:
但是,SQL Server不保证行的顺序 使用OUTPUT子句由DML语句处理并返回。
您需要在数据中标识一个自然键,然后对其进行引用以将新插入的行与OUTPUT
结果集进行匹配。
或者,您可以将INSERT
替换为MERGE
;在这种情况下,您将能够在identity
子句中为记录创建新创建的OUTPUT
值。