2010-01-18 3 views
0

다음 SQL 코드가 있습니다. MyTable이 MyTable.data에 의해 정렬되도록 보장합니까? 기본적으로 질문은 - 하나의 INSERT 문으로 여러 행을 삽입하는 경우 다른 연결을 삽입 중간에 가져 와서 다른 행을 내 행 사이에 삽입 할 수 있습니까?여러 행 INSERT-ing

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

1

SQL Server 데이터베이스를 단일 사용자 모드로 설정하고 다른 사용자가 연결되어 있지 않은 경우를 제외하고 이러한 행이 연속적으로 삽입된다는 보장은 없습니다.

하지만 질문은 다음과 같습니다. 왜 이것이 당신에게 중요한가? SQL 서버에서 은 결코 "시스템 지정"주문에 의존해야합니다. 주문이 필요하다면 명시 적으로 ORDER BY을 사용하십시오. 이는 주문 된 방식으로 행을 얻을 수있는 유일한 방법입니다.