2013-11-15 2 views
0

일반 매개 변수화 된 쿼리 (INSERT 또는 UPDATE)를 작성 중이며 삽입 된 열 (INSERT 쿼리의 경우) 및 매개 변수 (UPDATE 쿼리의 업데이트 된 열과 where 절 열)를 사용하고 있습니다.SQL 매개 변수가있는 쿼리에 OUTPUT 키워드가 여러 개있을 수 있습니까?

두 경우 모두 내 메서드에서 반환되는 열 이름을 지정하고 OUTPUT INSERTED.ColumnName을 사용하고 있습니다. 이 열은 테이블의 기본 키일 수 있지만 다른 키일 수도 있습니다.

이제 INSERT 또는 UPDATE를 수행 한 후 방금 삽입되었거나 업데이트 된 행의 키를 가져 오려고합니다. 어떻게해야합니까? OUTPUT INSERTED.ColumnName, SCOPE_IDENTITY()과 같은 것을 할 수 있습니까?

참고 : 중요한 경우를 대비하여이 절차는 저장 프로 시저가 아닙니다.

+2

당신이 우리에게 몇 가지 코드 보여줄 수를 ?? aaaaaand btw, 당신은 엔티티 프레임 워크를 보았습니까 ?? – Misters

+0

'SCOPE_IDENTITY()'는 현재 범위에 삽입 된 마지막 신원 값을 나타내는 단일 값을 반환합니다. 나는 여러 행을 처리 할 수있는 'OUTPUT' 절과 기본 테이블에 IDENTITY 열조차 갖지 않을 수도있는 곳에서 의미가 있다고 확신하지 않습니다. – HABO

+0

여러개의'OUTPUT' 키워드를 가질 수는 없지만,'OUTPUT Inserted.ColumnName, Inserted.ID'와 같이 ** ** 컬럼 **을 출력 할 수 있습니다. –

답변

1

물론 가능합니다.

DECLARE @result TABLE (
    ID INT, 
    SomeColumn NVARCHAR(100) 
) 

INSERT SomeTable (SomeColumn) 
OUTPUT SCOPE_IDENTITY(), INSERTED.SomeColumn 
INTO @result 
VALUES ('Foo'), 
     ('Bar') 

SELECT * FROM @result 

이 것 출력 : 그것은이 같은 비트 보일 것

ID | SomeColumn 
--------------- 
1 | 'Foo' 
2 | 'Bar' 
+0

구문이 다르게 보입니다. 저는 C#에서 매개 변수화 된 쿼리를 사용하고 현재'command.ExecuteScalar()'를 사용하고 있습니다. 여전히 2 개의 값을 출력 할 수 있습니까? 아니면 ExecuteReader()를 사용해야합니까? – user2320724

+0

@ user2320724 그것은 저장 프로 시저가 아니지만, ExecuteScalar를 사용할 수 없게됩니다. ExecuteScalar는 오직 하나의 값만을 반환하기 때문입니다. 'ExecuteReader'를 사용해야합니다. –

+0

테이블에 트리거가없는 경우 tablevariable, into 및 select 절을 건너 뛸 수 있습니다. INSERT ... OUTPUT이 삽입되었습니다 .Id, inserted.SomeColumn VALUES ...' – adrianm