TSQL触发器而不是插入

Gal*_*a88 2 t-sql sql-server triggers insert

我需要在某个表中插入后替换列值之一,如果它与禁止值匹配。

例子:

INSERT INTO [dbo].[TEST_A]
           ([COL_A]
           ,[COL_B])
     VALUES
           ('TEST'
           ,'TEST1')
Run Code Online (Sandbox Code Playgroud)

TEST1 是一个禁止值,我想将其替换为“BANNED”。

这是我写的触发器,但它似乎工作正常:

CREATE TRIGGER [dbo].[TEST_NAME_INS] ON [dbo].[TEST_A]
 INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO TEST_A
    (COL_A
    ,COL_B)
    SELECT 
    COL_A
   ,REPLACE(COL_B, 'TEST1', 'BANNED')
   FROM inserted
   WHERE INSERTED.COL_B IN ('TEST1')
Run Code Online (Sandbox Code Playgroud)

错误是,如果我在 COL_B 中插入不同的值,则不会插入任何行。

你能给我一个解决方案吗?

提前致谢

HLG*_*GEM 5

如果您的值多于您想放入 case 语句中的值,您可以尝试使用表来存储禁用词及其替换词。然后在插入中加入它,例如:

CREATE TRIGGER [dbo].[TEST_NAME_INS] ON [dbo].[TEST_A]
 INSTEAD OF INSERT
AS
BEGIN
    INSERT INTO TEST_A
    (COL_A
    ,COL_B)
    SELECT 
    COL_A
   ,CASE WHEN b.banned is null then i.col_b
         ELSE b.replacement
    END
   FROM inserted i
   LEFT JOIN Banned b on i.col_B = b.banned
Run Code Online (Sandbox Code Playgroud)