插入多行

时间:2010-01-18 12:33:11

标签: sql-server-2008 stored-procedures insert

我有以下sql代码。是否保证MyTable将按MyTable.data排序?基本上问题是 - 如果我使用一个INSERT语句插入多行,是否可以在插入过程中插入其他连接并在我的行之间插入其他内容?

CREATE TABLE MyTable(
    id bigint IDENTITY(1,1) NOT NULL,
    data uniqueidentifier NOT NULL,
        CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED (id ASC)
)

DECLARE @data uniqueidentifier
SET @data = NEWID()

WITH Dummy AS
(
    SELECT @data as data, 1 as n
    UNION ALL
    SELECT @data, n + 1
    FROM Dummy
    WHERE n < 100
)
INSERT INTO MyTable(data)
    SELECT data FROM Dummy

感谢。

3 个答案:

答案 0 :(得分:2)

如果我误解了你的问题,请原谅我。但是,如果这是您所追求的,那么您永远不应该依赖主键来订购数据。这不是主键的用途。数据的排序应该使用ORDER BY子句,或者使用您专门介绍的列来跟踪顺序。主键列用于标识数据,而不是排序。

答案 1 :(得分:2)

根据定义,SQL表没有已定义的顺序。但我不认为这就是你所要求的。我想你在问另一个进程是否可以在你的一个插入之间插入一行。答案是肯定的,除非您已将整个表锁定,出于并发原因,您可能不希望这样做。

答案 2 :(得分:1)

您无法保证将连续插入这些行 - 除非您将SQL Server数据库置于单用户模式并确保没有其他人连接。

但问题是:为什么这对你很重要?在SQL Server中,您应该从不依赖于“系统指定”的订单 - 如果您需要订购,请使用明确的ORDER BY - 这是获取订单行的唯一可靠方法时尚无论如何。