MAN*_*NGA 6 sql-server triggers sql-server-2005 sql-server-2008
我想在某些情况下绕过触发器,任何人都能帮助我吗?
我尝试使用此链接但无法找到解决方案.
提前致谢
Ral*_*ine 10
步骤1禁用触发
DISABLE TRIGGER Person.uAddress ON Person.Address;
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms189748.aspx
第2步做东西
UPDATE Person.Address SET HouseNumber = REPLACE(HouseNumber, ' ', '');
Run Code Online (Sandbox Code Playgroud)
步骤3启用触发器
ENABLE Trigger Person.uAddress ON Person.Address;
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms182706.aspx
- 必须说,小心使用!
你不能避免触发器被运行.您可以做的是在其中添加条件,例如:
CREATE TRIGGER trigger_name
ON table
AFTER INSERT
AS
begin
IF (your condition) begin
--code
END
end
Run Code Online (Sandbox Code Playgroud)
如果你有一个INSTEAD OF触发器,请小心.如果不对插入进行编码,则表中不会插入任何内容.
您可以通过检查临时表的存在来抑制触发器。需要抑制触发器的代码应该创建一个临时表(比如#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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7853 次 |
| 最近记录: |