1

我的 (tableA) 有一个标识字段 (ID),我需要通过一次插入操作一次插入多行,所以我使用表结构作为存储过程的传递参数

我需要按插入顺序插入的 id,所以我在我的 SP 中运行以下查询(tableB 与 tableA 具有相同的结构):

CREATE PROCEDURE ssp_Test
(
    tableA tableAType
)
AS
BEGIN

INSERT INTO tableB(field1, field2, ...)
OUTPUT INSERTED.ID
SELECT field1, field2, ... from tableA

END

如果我用 100 条记录运行上述过程,它会返回新的标识字段,并按照它插入到 tableB 的顺序,但是当我用 500 条记录运行它时,所有插入的 id 都返回,但没有合理的顺序,为什么会发生这种情况?

我不需要另一个临时表将它放在那里并对其进行排序并返回,我只想知道它为什么会发生,是否有任何解决方案而不使用额外的临时表进行排序?

4

3 回答 3

3

如果您想要订购的东西,您将不得不使用 ORDER BY 子句。尝试依赖物理顺序没有价值(即使您认为自己知道存在一个顺序(即因为聚集索引)

于 2011-03-05T11:26:02.037 回答
1

看这篇文章: http ://technet.microsoft.com/en-us/library/ms177564.aspx

它指出:“无法保证将更改应用于表的顺序与将行插入输出表或表变量的顺序一致。”

我建议在插入后使用选择来检索 ID。

于 2011-03-05T11:49:24.780 回答
0

要使用数字序列填充列,请使用 ROW_NUMBER()(或 SQL Server 2012 中的序列)。不要试图依赖 IDENTITY 列,因为它的行为不能总是得到控制。

于 2011-03-06T17:17:05.570 回答