我有以下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
感谢。
答案 0 :(得分:2)
如果我误解了你的问题,请原谅我。但是,如果这是您所追求的,那么您永远不应该依赖主键来订购数据。这不是主键的用途。数据的排序应该使用ORDER BY子句,或者使用您专门介绍的列来跟踪顺序。主键列用于标识数据,而不是排序。
答案 1 :(得分:2)
根据定义,SQL表没有已定义的顺序。但我不认为这就是你所要求的。我想你在问另一个进程是否可以在你的一个插入之间插入一行。答案是肯定的,除非您已将整个表锁定,出于并发原因,您可能不希望这样做。
答案 2 :(得分:1)
您无法保证将连续插入这些行 - 除非您将SQL Server数据库置于单用户模式并确保没有其他人连接。
但问题是:为什么这对你很重要?在SQL Server中,您应该从不依赖于“系统指定”的订单 - 如果您需要订购,请使用明确的ORDER BY
- 这是获取订单行的唯一可靠方法时尚无论如何。