在某个表中插入后,我需要替换其中一个列值(如果它与禁止值匹配)。
例子:
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 中返回另一个函数?
java - 当 PoolingHttpClientConnectionManager 中的 Max
scala - 如何对spark Dataframe进行合并操作?
amazon-web-services - AWS : Security Group Auto Sc
cuda - 从未对齐的 uint8_t 重铸为 uint32_t 数组读取 - 未获取所有值
angular - 取消选中所有选中的复选框 Angular2