2012-03-01 3 views
4

어떤 경우에는 트리거를 무시하고 싶습니다. 아무도 트리거 할 수 없습니까?SQL Server 2008에서 트리거를 무시하는 방법

나는 this link과 시도했지만 해결 방법을 찾을 수 없습니다.

미리 감사드립니다.

+2

유일한 방법은 일시적으로 트리거를 사용하지 않도록 설정하는 것입니다. 테이블에 있고 활성 상태 인 경우이를 우회 할 방법이 없습니다. –

+0

ok msrv_s. 일시적으로 트리거를 비활성화하는 방법. 당신이 나에게 예제 나 코드를 줄 수 있습니까? 다시 한 번 감사드립니다. –

+1

(1) MSDN, SQL Server 온라인 설명서, (2) DISABLE TRIGGER 검색 - [this page here] (http://msdn.microsoft.com/en-us/library/ms189748)를 참조하십시오. 당신이 필요로하는 모든 세부 사항을 제공합니다 ** : DISABLE TRIGGER Person.uAddress ON Person.Address; 그리고 다시 활성화시키기 :'ENABLE TRIGGER Person.uAddress ON Person.Address ; ' –

답변

6

트리거가 실행되는 것을 방지 할 수 없습니다. 당신이 INSTEAD OF 트리거가있는 경우

CREATE TRIGGER trigger_name 
    ON table 
    AFTER INSERT 
AS 
begin 
    IF (your condition) begin 
    --code 
    END 
end 

단지주의 : 당신이 할 수있는 것은, 예를 들어, 거기에 조건을 추가합니다. 삽입 코드를 작성하지 않으면 테이블에 아무 것도 삽입되지 않습니다.

+0

감사합니다 @ diengo,하지만 두 테이블 tableA 및 tableB 내 트리거를 여러 레코드 업데이트를 처리 할 수 ​​없습니다. 그래서 지금은 파 요구 사항 난 tableA에서 약 100 행을 업데이 트해야하므로 단 하나의 레코드가 tableB에 업데이 트 (즉, 한 번만 방아쇠를 의미합니다 화재)입니다. 이 경우 트리거를 우회하려면 tableA 및 tableB update에 대한 두 개의 update 문을 작성합니다. 감사합니다 –

+0

안녕하세요 manish! 나는 이해하지 못했다. 더 자세하게 얘기해 주 시겠어요? 어쩌면 몇 가지 예를 제공 할 수 있습니다. – Diego

+0

테이블 _A (ID, 이름, 날짜) 테이블 _B (BID, 이름) 업데이트 Table_B의 Table_A에 대한 업데이트 트리거가 있습니다. 참조 업데이트 표 _A 집합 이름 = 'OB'(1,2,3,4,5,6,7, ... 100)의 ID 트리거가 한 번만 작동합니다. –

3

@Manish : 방아쇠를 우회하는 것이 좋은 옵션 형태의 베스트 프랙티스 관점이 될 것이라고 생각하지 않습니다. 대신에 트리거를 실행하는 데 필요한 일련의 조건을 평가하고 고려하여 필터링합니다.

2

임시 테이블이 있는지 확인하여 트리거를 억제 할 수 있습니다. 트리거를 억제해야하는 코드는 임시 테이블을 생성해야합니다 (예 : #suppress_trigger). 트리거에서이 임시 테이블의 존재를 확인하고 리턴하십시오. 예 :

CREATE TABLE [dbo].[dummy](
    [Id] [int] IDENTITY(1,1) NOT NULL, 
    [Val] [char](1) NULL) 

--create a history table which gets populated through trigger 
CREATE TABLE [dbo].[dummy_hist](
[Id] [int] NULL, 
[Val] [char](1) NULL) 

CREATE TRIGGER [dbo].[trig_Insert] 
    ON [dbo].[dummy]  
    AFTER INSERT 
AS 
BEGIN 

    SET NOCOUNT ON; 
    if OBJECT_ID('tempdb..#Dummy_escape_trig') is not NULL 
     RETURN 

    INSERT INTO dummy_hist 
    SELECT * FROM inserted 

END 

--Proc for which trigger needs to be suppressed 
CREATE PROCEDURE [dbo].[ins_dummy] 
     @val AS CHAR(1) 
AS 
BEGIN 

    SET NOCOUNT ON;  

    CREATE TABLE #Dummy_escape_trig (id int) 

INSERT INTO dummy 
    VALUES(@val) 
END 
관련 문제