트리거 에 대해 정말 알 고 있 습 니까?데이터 실시 간 동기 화 업데이트 문제 분석
--
Create table Table_a
(
ID int identity(1,1),-- ID
Content nvarchar(50),
UpdateIDForTrigger int
)
그리고 우 리 는 이 표 에 트리거
Create TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
declare @ID int
set @ID=(select ID from inserted)
-- Table_a UpdateIDForTrigger ,
UPDATE Table_a
SET UpdateIDForTrigger = (@ID+10)-- , ID 10
WHERE ID = @ID;
END
을 만 들 었 습 니 다.그 다음 에 우 리 는 일반 항목 의 삽입 결과 에 따라 테스트 를 한 다음 에
--
insert into Table_a(Content) values(' ');
insert into Table_a(Content) values(' ');
을 한 다음 에 현재 동적 표 의 데이터 상황
select * from Table_a
조회 결 과 를 조회 합 니 다.그림: 우 리 는 트리거 가 실행 되 는 것 을 볼 수 있다.모든 데이터 가 삽 입 될 때 트리거 는 Update 기능 을 동시에 실행 합 니 다.그 다음 에 우 리 는 데 이 터 를 대량으로 삽입 해 야 합 니 다.우리 가 삽입 하 는 것 을 편리 하 게 하기 위해 서 우 리 는 임시 적 인 기본 정보 표를 만 들 었 습 니 다.
--
Create table Table_Info
(
ID int identity(1,1),
Content nvarchar(50)
)
그 다음 에 데 이 터 를
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
insert into Table_Info(Content) values(' ');
에 대량으로 삽입 할 수 있 습 니 다.이번 중점 은 우리 가 이 sql 문 구 를 실행 할 때 메시지 상자 에 오류 알림 이 발생 할 수 있 습 니 다. 경험 이 있 는 친구 들 은 이 오 류 는 여러 결과 가'='으로 변 수 를 부여 해서 생 긴 것 이라는 것 을 알 게 될 것 이다.즉,set@변수=(select 다 중 줄 결과 from Table)이 럴 때 궁금 합 니 다.문제 가 어디 에 있 습 니까?트리거 가 데 이 터 를 꽂 을 때마다 실행 되 지 않 습 니까?그래서 저 는 트리거 를 고 쳤 습 니 다.
insert into Table_a(Content)
select Content from Table_Info
다음 에 위의 대량 삽입 을 실행 해 보 겠 습 니 다.그의 inserted 표 에 존재 하 는 값 이 무엇 인지 보 겠 습 니 다.과연 예상 한 대로 inserted 표 의 결 과 는 데이터 가 아 닙 니 다. 은 잘못된 원인 을 알 고 우 리 는 조작 하기 가 간단 합 니 다.우 리 는 inserted 표 에 커서 를 만 들 수 있 습 니 다.그리고 커서 를 통 해 대량으로 삽 입 된 줄 마다 데 이 터 를 편집 합 니 다.다음은 우리 가 수정 한 트리거 코드 입 니 다.
Alter TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
select ID from inserted;
END
다음 에 우 리 는 위의 대량 에 따라 데 이 터 를 삽입 한 다음 에 동적 표 의 결 과 를 조회 합 니 다.
Alter TRIGGER [dbo].[Table_a_Ins]
ON [dbo].[Table_a]
AFTER INSERT
AS
BEGIN
declare @ID int
declare cur_Insert cursor
for
select ID from inserted
open cur_Insert
fetch next from cur_Insert into @ID
while @@fetch_status=0
begin
UPDATE Table_a
SET UpdateIDForTrigger = (@ID+10)-- , ID 10
WHERE ID = @ID;
fetch next from cur_Insert into @ID
end
close cur_Insert
deallocate cur_Insert
END
이 실 행 될 때 오류 알림 이 없습니다.실행 결 과 는 다음 과 같 습 니 다.이렇게 하면 데 이 터 를 대량으로 삽입 할 때 트리거 도 사용 할 수 있다.그리고 몇몇 선배 들 의 조언 을 결합 해 트리거 코드 를 바 꿨 다.위의 커서 를 아래 의 방식 으로 바 꾸 었 습 니 다.
insert into Table_a(Content)
select Content from Table_Info;
select * from Table_a;
다음 에 몇 줄 의 데 이 터 를 대량으로 삽입 한 결과 도 가능 합 니 다.그 러 니까 배 움 은 끝 이 없 잖 아!! 요약:트리거 실행 은 Insert 작업 이나 Update,Delete 등 작업 을 수행 할 때마다 실 행 됩 니 다.대상 은 수 정 된 줄 수(즉,줄 마다 수 정 될 때 실행)가 아 닙 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
트리거로 재고 관리 for PostgreSQL13트리거로 재고 관리 for PostgreSQL13 PostgreSQL 버전 13.2 pgAdmin4 버전 5.3 트리거 사양 전표 데이터가 추가되면 상품 테이프의 재고를 줄이고 최종 업데이트 날짜를 변경합니다. 전표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.