Sql server 2008 MS SQL 2008-触发器
我是SQL触发器新手,需要一些帮助。我有下面的更新触发器,它工作正常——当状态为“已完成”或“由错误创建”时更新CompletedDateSql server 2008 MS SQL 2008-触发器,sql-server-2008,tsql,triggers,Sql Server 2008,Tsql,Triggers,我是SQL触发器新手,需要一些帮助。我有下面的更新触发器,它工作正常——当状态为“已完成”或“由错误创建”时更新CompletedDate ALTER TRIGGER [dbo].[trigger_CompletedDate] ON [dbo].[ERP_PurchaseRequest] AFTER UPDATE AS BEGIN SET NOCOUNT ON; IF (UPDATE(PRStatus)) BEGIN UPDATE pr SET Comple
ALTER TRIGGER [dbo].[trigger_CompletedDate] ON [dbo].[ERP_PurchaseRequest] AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (UPDATE(PRStatus))
BEGIN
UPDATE pr SET CompletedDate = GETDATE()
FROM [ERP_PurchaseRequest] pr
INNER JOIN INSERTED i ON pr.PRStatus = i.PRStatus
WHERE (i.PRStatus = 'Completed'
AND pr.PRID = i.PRID)
OR
(i.PRStatus = 'Created By Error'
AND pr.PRID = i.PRID)
END
END
现在,我需要修改此触发器以执行以下操作:
1) 如果i.PRStatus='Completed',则更新CompletedDate,并对PRID到PRID已更新的不同表执行另一个更新查询,如:
UPDATE Table1 SET Column1 = 'Yes" Where PRID = i.PRID (from the inserted table)
2) ElseIf i.PRStatus='Created By Error',然后只更新CompletedDate
如果可能,请提供示例代码。谢谢
谢谢你,你的问题并没有明确说明你在这里到底想要实现什么,你也没有展示出你试图让它发挥作用的任何东西。我会尽我最大的努力弄清楚你来这里干什么,但我没有所有的信息。无论如何,给你。让我们知道它是否有效
IF OBJECT_ID('ERP_PurchaseRequest') IS NULL
CREATE TABLE ERP_PurchaseRequest (
PRID INT,
PRStatus VARCHAR(255),
CompletedDate DATETIME)
GO
IF OBJECT_ID('OtherTable') IS NULL
CREATE TABLE OtherTable (
PRID INT,
Column1 VARCHAR(50))
GO
CREATE TRIGGER [dbo].[trigger_CompletedDate] ON ERP_PurchaseRequest AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF (UPDATE(PRStatus))
BEGIN
UPDATE pr SET CompletedDate = GETDATE()
FROM ERP_PurchaseRequest pr
INNER JOIN inserted i ON pr.PRID = i.PRID
AND pr.PRStatus = i.PRStatus
WHERE i.PRStatus IN ('Completed', 'Created By Error')
UPDATE ot SET Column1 = 'Yes'
FROM OtherTable ot
INNER JOIN inserted i on i.PRID = ot.PRID
WHERE I.PRStatus = 'Completed'
END
END
你试过什么?什么不起作用?为什么不起作用?我不知道当更新加入到插入的表中时如何分离它。我找到了解决方法。谢谢@David。真管用!澄清:正如你在一开始提到的,我是个新手。我从另一个线程学到的使用插入表的更新/连接技术。我确实试过,但实际上卡住了,这就是我来这里寻求帮助的原因。我不会不尝试就发帖子。无论如何,再次谢谢你。