You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2012触发器内更新语句:插入后执行更新查询

插入后自动清理字段引号的After Insert触发器实现方案

你这个触发器的思路很清晰——就是要在数据插入到DEMO表后,自动去掉[DESC]字段开头的双引号。我把你的代码整理成更易读的格式,还补充了一些优化建议:

首先是表的创建语句:

CREATE TABLE DEMO (
    MASTERID INT,
    PRICEINCVAT FLOAT,
    [DESC] VARCHAR(50)
)

插入测试数据的SQL:

INSERT DEMO 
SELECT 1000001, 25.69, '"Bremsbelagsatz, Scheibenbremse "' 
UNION ALL 
SELECT 1000001, 62.58, '"Bremsbelagsatz, Scheibenbremse "'

你的原始触发器代码(已格式化):

CREATE TRIGGER [dbo].[anUpdate] 
ON [dbo].[DEMO] 
AFTER INSERT 
AS 
SET NOCOUNT ON 
BEGIN
    UPDATE [dbo].[DEMO] 
    SET [DESC] = SUBSTRING([DESC], 2, LEN([DESC])) 
    WHERE LEFT([DESC], 1) = '"'
END

几点优化建议:

  • SET NOCOUNT ON这个设置非常实用,它能防止触发器执行时返回额外的行数统计消息,避免干扰调用该插入操作的应用逻辑。
  • 原始触发器会更新整个表中符合条件的行,如果只需要处理刚插入的记录,建议关联INSERTED系统临时表,这样能大幅提升效率,尤其是当表数据量很大的时候。因为你的DEMO表没有定义主键,我用所有字段来关联定位插入的行,如果后续给表加了主键,只用主键关联会更准确:
CREATE TRIGGER [dbo].[anUpdate] 
ON [dbo].[DEMO] 
AFTER INSERT 
AS 
SET NOCOUNT ON 
BEGIN
    UPDATE d
    SET d.[DESC] = SUBSTRING(d.[DESC], 2, LEN(d.[DESC])) 
    FROM [dbo].[DEMO] d
    JOIN INSERTED i 
        ON d.MASTERID = i.MASTERID 
        AND d.PRICEINCVAT = i.PRICEINCVAT 
        AND d.[DESC] = i.[DESC]
    WHERE LEFT(d.[DESC], 1) = '"'
END

内容的提问来源于stack exchange,提问作者TULSI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:26:41