关于Ms Sql Trigger

时间:2013-10-28 21:30:08

标签: sql sql-server

我想触发更改BarcodeFormat列的值。

所以我做了一个触发器,但我不确定它是否有效。

以下是代码:

CREATE trigger tr_changedUPC
on Item
after update
as update Item
SET BarcodeFormat=(case when(ISNUMERIC(ItemLookupCode)=1) AND
(LEN(ItemLookupCode)=12) AND (NOT(BarcodeFormat=9)) then 9 else 6 end) from inserted

如您所见,我在项目表上触发。如果列Item.ItemLookupCode的值发生更改,我也想更改列Item.BarcodeFormat的值。

我还没有执行这个SQL代码。所以我希望你看看这段代码是否合适。

1 个答案:

答案 0 :(得分:1)

根据此SQL Fiddle

CREATE trigger tr_changedUPC
on Item
after update
as update Item
SET BarcodeFormat=(case when(ISNUMERIC(ItemLookupCode)=1) AND
(LEN(ItemLookupCode)=12) AND (NOT(BarcodeFormat=9)) then 9 else 6 end) from inserted

您的代码应该以这种方式稍微改进一下,以使列不那么模糊:

CREATE TRIGGER tr_changedUPC
    on Item
    after UPDATE
    as UPDATE Item
    SET Item.BarcodeFormat=(case when(ISNUMERIC(Item.ItemLookupCode)=1) AND
    (LEN(Item.ItemLookupCode)=12) AND (NOT(Item.BarcodeFormat=9)) then 9 else 6 end) from inserted;

根据小提琴的结果,您的代码很好,因为“BarCodeFormat”列的值会随着“ItemLookupCode”列的更新而相应更新。