2012-06-27 6 views
2

테이블 값 생성자 (http://msdn.microsoft.com/en-us/library/dd776382(v=sql.100).aspx)를 사용할 때, 여러 행을 삽입하려면 TVC의 행과 일치하도록 보장 된 채워진 ID 열의 순서입니까?SQL Server의 다중 행 삽입에서 ID 할당에 대한 주문 보증

예. 그들은 A = 1, B = 1, A = 2, B = 2와 일치되도록

CREATE TABLE A (a int identity(1, 1), b int) 

INSERT INTO A(b) VALUES (1), (2) 

이 경우 B와 동일한 순서로, 즉, 할당 될 수있는 기관에 의해 보장 (A)의 값이다.

답변

2

위의 내 의견에 피기 백하고 인서트/선택 + 주문의 동작이 신분 확인 순서 (# 4 : from this blog)를 보장한다는 것을 알고 있음

다음과 같은 방법으로 테이블 값 생성자를 사용하여 목표를 달성 할 수 있습니다 (이것은 당신의 다른 제약 조건을 만족시키는 지 확실하지 않다.) 당신이 신원 생성이 c ategory id.

insert into thetable(CategoryId, CategoryName) 
select * 
from 
    (values 
    (101, 'Bikes'), 
    (103, 'Clothes'), 
    (102, 'Accessories') 
) AS Category(CategoryID, CategoryName) 
order by CategoryId 
+0

따라서 OP의 예를 사용하여 OP가 각 행에서 'a'와 'b'사이의 일치를 보장하려면 'INSERT INTO A (b) SELECT b FROM (VALUES (1), (2)) AS v (b) ORDER BY b'. 그게 당신이 말하는거야? –

+0

'order by'를 사용하여 행을 가져 오는 순서 만 보장 할 수 있습니다. select (from order by)를 사용하지 않고 select에서 삽입하는 경우 행이 시작될 때 (특정 순서로) 삽입되는 방법에 대한 보장은 없습니다. 위의 예와 같은 표현식을 사용하면 명시 적으로 사용 된 일부 열을 명시 적으로 포함하고 정렬 된 값을 사용하지 않는 한 보증을하지 않습니다. 위의 예제에서 101,102와 103은 명령받은대로 주문하게됩니다. – jean

-2

한 번에 레코드를 삽입하는 한 다릅니다. 당신이 다음 = 2 다시 b 값 = 2를 삽입 다시 기록을 삭제하면 삽입 한 후 예를 들어, 다음 ID 열 값 (a)는 1

설명하기 위해 최대 될 것

DECLARE @Sample TABLE 
(a int identity(1, 1), b int) 

Insert into @Sample values (1),(2) 

a b 
1 1 
2 2 

Delete from @Sample where a=2 

Insert into @Sample values (2) 
Select * from @Sample 

a b 
1 1 
3 2 
+0

한 번에 삽입하는 중입니다. 주문이 보장되는지 알고 싶습니다. 삽입에 대한 주문 보증을 제공하는 http://blogs.msdn.com/b/sqltips/archive/2005/07/20/441053.aspx 항목 4를 비교하십시오. 위의 삽입 후 a = 1, b = 2 및 a = 2, b = 1 인 주문이 가능한지 알고 싶습니다. –

+0

조합은 항상 동일하게 유지됩니다. 설명서에 Insert into .. 올바른 순서로 삽입되지 않을 수 있습니다. 데이터가 올바른 값으로 삽입되지만 올바른 순서로 삽입되지 않습니다. 예를 들어 U를 삽입하면 b = 1 및 b = 2입니다. 검색된 데이터는 = 2가됩니다. b = 2 및 a = 1 b = 1입니다.이 문제는 SQL Server 2008 – praveen

+0

에서 해결되었습니다. TVC가 2008 년에 새로 추가 된 기능이라는 것을 알고 있지만이 문제로 무엇을 언급하고 있는지 확실하지 않습니다. 이 설명서가 보증 된 주문임을 나타내는 문서 나 기타 사항을 알려 주시면 올바른 대답으로 표시됩니다. 감사. –