sql-server - TSQL 触发器而不是插入

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

例子:

INSERT INTO [dbo].[TEST_A]
           ([COL_A]
           ,[COL_B])
     VALUES
           ('TEST'
           ,'TEST1')

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')

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

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

提前致谢

最佳答案

如果您的值多于您想在 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

https://stackoverflow.com/questions/40132550/

相关文章:

r - 如何在列表列上应用一个函数并在 dplyr 和 purrr 中返回另一个函数?

scala - 隐式是私有(private)的吗?

python - Django 选择和字典

java - 当 PoolingHttpClientConnectionManager 中的 Max

scala - 如何对spark Dataframe进行合并操作?

amazon-web-services - AWS : Security Group Auto Sc

cuda - 从未对齐的 uint8_t 重铸为 uint32_t 数组读取 - 未获取所有值

angular - 取消选中所有选中的复选框 Angular2

apache-spark - 从 Spark 转换函数中动态地从 HDFS 读取文件

indexing - 确定 Teradata 中表的主索引