0

我正在寻求一些关于在 Visual Studio 2010 上编写 AQL 触发器的帮助。我已经跟踪了许多我发现搜索的触发器示例,但我可以设法使其工作。也许你们中在这方面有更多经验的人可以给我一些帮助。

这是场景:我有一个名为“testDB”的数据库。该数据库有 4 个表,主表称为 Product,由 4 列(productId、qualityControl-1-required、qualityControl-2-required、readyToProcess)组成。

如果 qualityControl-#-required 中的任何一个为 yes,则 productId 被插入到相应的 Qcontrol 表中。表 QControl1 和 QControl2 包含 4 个字段(id(pK)、productId(Fk)、qControlFinished、notes)。

第 4 个表 QControlReady 还包含 4 个字段(id(pK)、productId(Fk)、qControl1Done、qControl2Done)。

我想要完成的是一旦 QControl1 和 QControl2 完成并且 QControlReady 上的值反映,所以我想将列 readyToProcess 中的 Product 表更新为“是”。

CREATE TRIGGER dbo.Product_Updated 

ON dbo.Product

FOR  UPDATE ON dbo.QControlReady

AS BEGIN

  UPDATE dbo.Product SET dbo.Product.readyToProcess = "Y"

  FROM UPDATED

  WHERE updated.id = dbo.Product.productId 

  AND dbo.QControlReady.qControl1Done == "Yes" 

  AND dbo.QControlReady.qControl2Done == "Yes"

END 
4

1 回答 1

0

我认为FOR触发器声明不存在关键字。之前的关键字UPDATE ON dbo.QControlReady必须是 BEFORE 或 AFTER

尝试其中之一(选择之前或之后):

CREATE TRIGGER dbo.Product_Updated 


BEFORE/AFTER UPDATE ON dbo.QControlReady

AS BEGIN

  UPDATE dbo.Product SET dbo.Product.readyToProcess = "Y"

  FROM UPDATED

  WHERE updated.id = dbo.Product.productId 

  AND dbo.QControlReady.qControl1Done = "Yes" 

  AND dbo.QControlReady.qControl2Done = "Yes"

END 

在 BEGIN 之前,您没有指定您在哪个表上工作。

于 2013-07-22T15:14:12.397 回答