SQL Server 2008触发器
我不是新来的SQL Server,但我是触发器的新手。我已经阅读了一些教程,说实话,语法仍然有点混乱。SQL Server 2008触发器
我试图创建一个触发器,检查字段被设置为特定的值,然后更新同一个表中的另一个字段。
希望下面的代码会自己说话,问题是显而易见的人
ALTER TRIGGER updateCompletedDate
ON projects
AFTER INSERT, UPDATE
AS
IF UPDATE(status)
BEGIN
UPDATE projects
SET date_complete = GETDATE()
FROM inserted
WHERE inserted.status = 'Completed'
AND projects.date_complete = '1900-01-01'
END
上面的代码没有我希望的效果。当我更新一行并将状态设置为Completed
时,date_complete
列保持默认值1900-01-01
。
感谢
按marc_s的意见我修改了扳机,现在工作的下面。修复是在where子句中增加了AND inserted.id = projects.id
。
ALTER TRIGGER updateCompletedDate
ON projects
AFTER INSERT, UPDATE
AS
IF UPDATE(status)
BEGIN
UPDATE projects
SET projects.date_complete = GETDATE()
FROM inserted
WHERE inserted.status = 'Completed'
AND inserted.id = projects.id
AND projects.date_complete = '1900-01-01'
END
谢谢大家。
我看不出你在你的Projects
表连接在Inserted
伪表更新到行被插入的那些行/。应该有类似
inserted.ID = projects.ID
或类似的东西WHERE
子句中:
UPDATE p
SET
p.date_complete = GETDATE()
FROM
dbo.Projects p
INNER JOIN
inserted i ON inserted.id = projects.id
WHERE
i.status = 'Completed'
AND p.date_complete = '1900-01-01'
虽然我还没有尝试上面的例子,但我仍然将其标记为答案,因为您关于链接插入的表和项目表的原始评论是解决方案。 – Urbley 2014-12-03 14:56:27
尝试下面的触发器更改。我只做了一些小的改变。
ALTER TRIGGER updateCompletedDate
ON projects
AFTER INSERT, UPDATE
AS
BEGIN
IF UPDATE(status)
BEGIN
DECLARE @status AS VARCHAR(20)
DECLARE @ID AS INT
SELECT @status = status, @ID = ID FROM INSERTED
UPDATE projects
SET date_complete = GETDATE()
WHERE @status = 'Completed'
AND id = @ID
AND CONVERT(CHAR(10), date_complete, 101) = '1900-01-01'
END
END
嗨Veera这不适用于我,但不幸的是,但基于marc_s的评论,我设法让它工作。非常感谢你。我现在编辑该问题以包含修复程序。 – Urbley 2014-12-03 10:12:01
我不看你怎么是*连接*在'插入更新所插入的那些行/ '您的'Projects'表中的行的伪表。在'WHERE'子句中应该有'inserted.ID = projects.ID'之类的东西。另外:'date_complete'是否真的是该值,或者是数据库中的'NULL',并且在GUI中显示为'1900-01-01'?另外:请仔细阅读** DATETIME栏,因为它们还包含**时间**部分! – 2014-12-03 09:49:34
首先尝试使用没有条件的触发器“AND projects.date_complete ='1900-01-01'”。如果工作完美,那么问题在于日期比较。 – Veera 2014-12-03 09:51:02
干杯家伙。 marc_s - 日期字段默认为'1900-01-01'。不为null。就像我说的,我对触发器很陌生,所以我会在where子句中查看inserted.id = projects.id比较。维拉 - 谢谢我也会考虑这一点。 – Urbley 2014-12-03 09:59:09