MADAO1021 2022-05-18 10:10 采纳率: 0%
浏览 214
已结题

写触发器时提示“如果 DML 语句包含不带 INTO 子句的 OUTPUT 子句,则该语句的目标表不能具有任何启用的触发器”

在项目中遇到一个情况,系统标准功能是,当创建A表单据并保存时,会自动更新B表中的StockStatus值,但是这个值在A表上显示不出来,现在希望将B表中的StockStatus值实时显示在A表上,就在A表上加了一个字段pubuserdefnvc2,然后在B表上做了一个触发器,当B表StockStatus更新时,自动更新A表的pubuserdefnvc2。但是在单据保存的时候就报错了,提示如果 DML 语句包含不带 INTO 子句的 OUTPUT 子句,则该语句的目标表不能具有任何启用的触发器。
SQL SERVER触发器如下:

ALTER TRIGGER [dbo].[ST_SerialNumber_UPDATE] ON [dbo].[ST_SerialNumber]
FOR UPDATE,INSERT
AS
DECLARE @ID varchar(50)
DECLARE @ZT varchar(50)

SELECT @ID=a.id,
@ZT=c.Name
FROM INSERTED a
LEFT JOIN ST_RDRecord_b b on b.SerialNumbers=a.SNCode
LEFT JOIN eap_EnumItem c on c.code=cast(a.StockStatus as nvarchar(50))

Begin
Update ST_RDRecord_b Set pubuserdefnvc2=@ZT Where id=@ID
END

报错如下:

img

网上查了一些,得到的结果是应该创建临时表用于更新,但是具体怎么写实在没有搞清楚
所以想请教下应该怎么改,还请赐教!
  • 写回答

1条回答 默认 最新

  • 歇歇 2022-05-23 05:03
    关注

    请采纳

    
    ALTER TRIGGER [dbo].[ST_SerialNumber_UPDATE] ON [dbo].[ST_SerialNumber]
    FOR UPDATE,INSERT
    AS
    Begin
    Update t1 set pubuserdefnvc2=t3.name
    from ST_RDRecord_b t1
    inner join INSERTED t2 on t1.id=t2.id
    LEFT JOIN eap_EnumItem t3 on t3.code=cast(t2.StockStatus as nvarchar(50))
    END
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 5月26日
  • 修改了问题 5月18日
  • 创建了问题 5月18日

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站