트리거 대신보기에 여러 레코드/배치 삽입을 삽입해야하는 경우가 있습니다. 삽입 된 ID 값을 검색하려면 어떻게해야합니까? OUTPUT 절을 사용하여 삽입 된 테이블에서 ID를 검색하려고 시도했지만 항상 null을 반환합니다.보기에 여러 레코드를 삽입 할 때 tsql에서 ID 값을 반환합니다.
답변
이 설정을 사용하십시오.
create table InsteadOf
(
ID int identity primary key,
Name varchar(10) not null
)
go
create view v_InsteadOf
as
select ID, Name
from InsteadOf
go
create trigger tr_InsteadOf on InsteadOf instead of insert
as
begin
insert into InsteadOf(Name)
select Name
from inserted
end
문
insert into v_InsteadOf(Name)
output inserted.*
select 'Name1' union all
select 'Name2'
당신에게 오류를 줄 것이다.
메시지 334, 수준 16, 상태 1, 4 호선 문 은 INTO 절없이 OUTPUT 절을 포함하는 경우 모든 활성화 된 트리거를 가질 수없는 DML 문의 대상 테이블 '하는 것은 아니고'.
삽입에 INTO 절을 대신 사용하십시오.
declare @IDs table(ID int, Name varchar(10))
insert into v_InsteadOf(Name)
output inserted.* into @IDs
select 'Name1' union all
select 'Name2'
select *
from @IDs
당신에게 값이 아닙니다 null
로 0
를 제공합니다.
ID Name
----------- ----------
0 Name1
0 Name2
출력 절을 트리거에 넣을 수 있습니다.
create trigger tr_InsteadOf on InsteadOf instead of insert
as
begin
insert into InsteadOf(Name)
output inserted.*
select Name
from inserted
end
삽입 할 때 출력이 생성됩니다.
insert into v_InsteadOf(Name)
select 'Name1' union all
select 'Name2'
결과 :
는ID Name
----------- ----------
1 Name1
2 Name2
업데이트 :
가 삽입 문에서 출력을 캡처하려면 insert into ... exec (...)
declare @T table
(
ID int,
Name varchar(10)
)
insert into @T
exec
(
'insert into v_InsteadOf(Name)
values (''Name1''),(''Name2'')'
)
이 반환 값을 나중에 사용할 수 있도록 테이블 변수에 저장할 수 있습니까? 아래 쿼리는 삽입 된 행에 대해 ID로 0을 반환합니다. DECLARE의 @T 표 (ID INT, NAME VARCHAR (10)) @T 값으로 INSERT INTO v_InsteadOf (이름) OUTPUT 삽입했다. * ('GK'), ('GV') SELECT * FROM을 @ T – vgk
@vgk - 내 대답이 업데이트되었습니다. –
- 1. ElevateDB를 사용하여 레코드를 삽입 할 때 ID 값을 반환하는 방법
- 2. UDT를 사용하여 삽입하고 ID 값을 반환합니다.
- 3. oracle :보기에 삽입 할 수없는 이유는 무엇입니까
- 4. MySQL -보기에 삽입/업데이트/삭제
- 5. TSQL에서 여러 CTE 결합하기
- 6. 보기에 여러 값 전달하기
- 7. 안드로이드 : 여러 레코드를 SQL 데이터베이스에 삽입/업데이트
- 8. 오라클 - 새로 삽입 된 키 값을 반환합니다.
- 9. tsql에서 여러 조건으로 테이블 업데이트
- 10. 레코드를 삽입 할 웹 API
- 11. PHP에서 단일 쿼리 mysql에 여러 레코드를 삽입
- 12. 레코드를 테이블에 삽입 할 때 자동으로 대응 ID를 얻는 방법
- 13. 테이블에 값을 삽입 할 때 오류가 발생했습니다.
- 14. 테이블에 값을 삽입 할 때 sqLiteCantOpenDatabaseException이 발생합니까?
- 15. mysql 삽입 쿼리의 ID 필드 값을 대체 할 정규 표현식
- 16. 보기에 값을 채우는 수식
- 17. 보기에 값을 전달하는 방법
- 18. DB에 레코드를 삽입 할 때 인덱스가 정의되지 않았습니다.
- 19. Javascript로 Sql Server 2008에 레코드를 삽입 할 때 문제가 발생했습니다.
- 20. MySQL의 쿼리 삽입 여러 테이블에 동일한 ID
- 21. solaris는 edismax를 사용하여 페이지 매김 할 때 중복 레코드를 반환합니다.
- 22. 레일에 잘못된 값으로 레코드를 삽입 할 때 뭔가 잘못되었습니다. 3.2
- 23. null 값을 삽입 할 때 오류 처리, asp.net C#
- 24. 특정 값을 찾을 때 SQL 쿼리에서 여러 행을 반환합니다.
- 25. searchlogic은 내 레코드를 주문할 때 nil을 반환합니다.
- 26. 어떻게 오라클 데이터베이스에 여러 clob 레코드를 삽입
- 27. 레코드를 삭제할 때 자동 감소 T-SQL ID?
- 28. Id 값을 동적으로 생성 할 때 확인란의 값을 검색하는 방법
- 29. 보기에 레이아웃을 추가 할 때 ProgressDialog가 고정됩니다.
- 30. 는 mysql을 삽입 한 후 id = 1을 반환합니다.
당신은 내부의'OUTPUT' 절을 사용할 수 있습니다 사용할 수 있습니다 'INSTEAD OF'는 스스로를 방아쇠합니다. 아마도 조건부 논리로 'CONTEXT_INFO'를 검사하여 절을 포함하거나 포함하지 않는 삽입 문을 호출할지 여부를 알 수 있습니다. # –