发布于 2012-03-01 20:43:57
你无法避免触发器的运行。您可以在其中添加条件,例如:
CREATE TRIGGER trigger_name
ON table
AFTER INSERT
AS
begin
IF (your condition) begin
--code
END
end
如果你有一个INSTEAD OF触发器,要小心。如果不对插入进行编码,则不会在表中插入任何内容。
发布于 2012-03-01 20:59:19
步骤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, ' ', '');
Step 3启用触发器
ENABLE Trigger Person.uAddress ON Person.Address;
http://msdn.microsoft.com/en-us/library/ms182706.aspx
--必须说,小心使用!
发布于 2014-06-11 15:11:42
您可以通过检查临时表的存在来禁止触发器。需要取消触发器的代码应该创建一个临时表(比如#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
https://stackoverflow.com/questions/9516406
复制相似问题