【发布时间】:2019-04-25 22:08:22
【问题描述】:
我正在尝试在存储过程中创建一个触发器,因为它会在删除表时被删除。
我收到错误,无法执行。
CREATE PROCEDURE EC5Trigger2
AS
CREATE TRIGGER trVendorProductsPST
ON VendorProducts
FOR INSERT
AS
BEGIN
SET NOCOUNT ON
DECLARE @SKU VARCHAR(64)
SELECT @SKU = I.SKU FROM inserted AS I
INSERT INTO ProductStockTransactions (SKU, stockingCode)
VALUES (@SKU, 'A')
END
RETURN 0
【问题讨论】:
-
为什么要多次创建触发器?我假设因为你是在一个程序中完成的
-
您的触发器无论如何都已损坏,并且无法按预期用于多行插入。你应该摆脱对标量变量的赋值,直接从
inserted插入到目标表 -
你为什么不解决基本问题:
I am trying to save trigger in SP as it will be removed when the table is dropped.最简单的解决方案是将创建触发器保存在文件中。重新创建表后,只需执行创建触发器脚本 -
您的触发器有 MAJOR 缺陷,您似乎认为它会被 每行调用一次 - 事实并非如此。触发器将每条语句触发一次,因此如果您的
INSERT导致此触发器触发插入 25 行,您将触发触发器一次和@987654325 @ 伪表将包含 25 行。您的代码将从Inserted中选择这 25 行中的哪一行?它是不确定的,您将获得任意行,而您将忽略所有其他行。您需要重写触发器以考虑到这一点! -
NO - 既不是游标也不是 while 循环 - 使用 适当的、基于集合的 方法 - 这是迄今为止最有效的方法跨度>
标签: sql-server stored-procedures triggers