2010-01-18 116 views
0

我有以下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 

謝謝。

回答

2

根據定義,SQL表沒有定義的順序。但我不認爲這是你問的問題。我想你在問是否另一個進程可以在你的一個插入之間插入一行。答案是肯定的,除非你把整個表鎖定了,你可能不想爲了併發原因而去做。

2

原諒我,如果我誤解你的問題。但是,如果這是您所追求的,那麼您絕對不應該依賴主鍵來訂購數據。這不是主鍵。數據的排序應該使用ORDER BY子句或者由您專門介紹的列來跟蹤訂單。主鍵列用於識別數據,而不是排序。

+0

但是有可能嗎? – niaher 2010-01-18 12:52:43

1

您不能保證那些行將被連續插入 - 除非您將SQL Server數據庫置於單用戶模式並確保沒有其他人連接。

但問題是:爲什麼這對你來說甚至是重要的?在SQL Server中,您應該使用永不依賴於「系統給出」順序 - 如果您需要訂單,請使用明確的ORDER BY - 這是以有序方式獲得行的唯一可靠方法。