【发布时间】:2017-11-30 05:24:28
【问题描述】:
我目前正在 SQL Server 2014 上的 T-SQL 中处理存储过程。
我正在寻找一种方法或想知道是否可以在更新表时执行触发器,但前提是如果条件为真。
-- table project
--CREATE TABLE [MySchema].[Project] (
-- ProjectId INT
-- , Label VARCHAR(1000)
--);
-- trigger
CREATE TRIGGER trgUpdate_Project
ON [MySchema].[Project]
FOR UPDATE
AS
BEGIN
IF UPDATE ([Label])
PRINT 'Label updated, version 1'
END
GO
-- stored procedure
CREATE PROCEDURE [MySchema].[SaveProject]
-- Importing Parameters
@IsVersion BIT
, @Label VARCHAR(1000)
AS
BEGIN
IF @IsVersion = 0 -- don't execute trigger
BEGIN
UPDATE [A]
SET [A].Label = 'lorem ipsum text'
FROM [MySchema].[Project] AS [A]
WHERE [A].ProjectId = '1'
END
IF @IsVersion = 1 -- execute Trigger
BEGIN
UPDATE [A]
SET [A].Label = @Label
FROM [MySchema].[Project] AS [A]
WHERE [A].ProjectId = '1'
END
END
你怎么看,如果@IsVersion = 1,是否有可能以某种方式执行触发器?
你会怎么解决这个...非常感谢!!
【问题讨论】:
-
如果版本设置为 1,标签是否会设置为“lorem ipsum text”?如果没有,请检查插入的触发器,看看它是否需要更进一步。
-
谢谢,好点检查插入触发器! ...说实话,模型有点复杂。在我的实际应用程序中,我需要更新 ProjectTable 中的另一个 Id,当创建一个新版本时......这只是一个简单的例子 :) 谢谢!
标签: sql-server tsql stored-procedures triggers