어떤 경우에는 트리거를 무시하고 싶습니다. 아무도 트리거 할 수 없습니까?SQL Server 2008에서 트리거를 무시하는 방법
나는 this link과 시도했지만 해결 방법을 찾을 수 없습니다.
미리 감사드립니다.
어떤 경우에는 트리거를 무시하고 싶습니다. 아무도 트리거 할 수 없습니까?SQL Server 2008에서 트리거를 무시하는 방법
나는 this link과 시도했지만 해결 방법을 찾을 수 없습니다.
미리 감사드립니다.
트리거가 실행되는 것을 방지 할 수 없습니다. 당신이 INSTEAD OF 트리거가있는 경우
가CREATE TRIGGER trigger_name
ON table
AFTER INSERT
AS
begin
IF (your condition) begin
--code
END
end
단지주의 : 당신이 할 수있는 것은, 예를 들어, 거기에 조건을 추가합니다. 삽입 코드를 작성하지 않으면 테이블에 아무 것도 삽입되지 않습니다.
감사합니다 @ diengo,하지만 두 테이블 tableA 및 tableB 내 트리거를 여러 레코드 업데이트를 처리 할 수 없습니다. 그래서 지금은 파 요구 사항 난 tableA에서 약 100 행을 업데이 트해야하므로 단 하나의 레코드가 tableB에 업데이 트 (즉, 한 번만 방아쇠를 의미합니다 화재)입니다. 이 경우 트리거를 우회하려면 tableA 및 tableB update에 대한 두 개의 update 문을 작성합니다. 감사합니다 –
안녕하세요 manish! 나는 이해하지 못했다. 더 자세하게 얘기해 주 시겠어요? 어쩌면 몇 가지 예를 제공 할 수 있습니다. – Diego
테이블 _A (ID, 이름, 날짜) 테이블 _B (BID, 이름) 업데이트 Table_B의 Table_A에 대한 업데이트 트리거가 있습니다. 참조 업데이트 표 _A 집합 이름 = 'OB'(1,2,3,4,5,6,7, ... 100)의 ID 트리거가 한 번만 작동합니다. –
@Manish : 방아쇠를 우회하는 것이 좋은 옵션 형태의 베스트 프랙티스 관점이 될 것이라고 생각하지 않습니다. 대신에 트리거를 실행하는 데 필요한 일련의 조건을 평가하고 고려하여 필터링합니다.
1 단계 해제 트리거
DISABLE TRIGGER Person.uAddress ON Person.Address;
http://msdn.microsoft.com/en-us/library/ms189748.aspx
단계 2 마 물건
UPDATE Person.Address SET HouseNumber = REPLACE(HouseNumber, ' ', '');
3 단계 활성화 트리거
ENABLE Trigger Person.uAddress ON Person.Address;
http://msdn.microsoft.com/en-us/library/ms182706.aspx
- 주의해서 사용해야합니다!
임시 테이블이 있는지 확인하여 트리거를 억제 할 수 있습니다. 트리거를 억제해야하는 코드는 임시 테이블을 생성해야합니다 (예 : #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
유일한 방법은 일시적으로 트리거를 사용하지 않도록 설정하는 것입니다. 테이블에 있고 활성 상태 인 경우이를 우회 할 방법이 없습니다. –
ok msrv_s. 일시적으로 트리거를 비활성화하는 방법. 당신이 나에게 예제 나 코드를 줄 수 있습니까? 다시 한 번 감사드립니다. –
(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 ; ' –