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 中插入不同的值,则不会插入任何行。
你能给我一个解决方案吗?
提前致谢
如果您的值多于您想放入 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)
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |