首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过Server中的触发器更新多行

通过Server中的触发器更新多行
EN

Stack Overflow用户
提问于 2019-03-12 10:40:04
回答 1查看 28关注 0票数 0

如果fld_IsUpdated设置为true,我将在下面使用触发器来更新行。

代码语言:javascript
复制
ALTER TRIGGER [dbo].[UpdateFieldDate_GroupChat] ON [dbo].[tbl_GroupChat]
AFTER UPDATE
AS
     SET NOCOUNT ON;
     IF
     (
         SELECT i.fld_IsUpdated
         FROM inserted i
     ) = 1
         BEGIN
             DECLARE @now BIGINT= (CONVERT([BIGINT], replace(replace(replace(CONVERT([VARCHAR](19), GETDATE(), (121)), ':', ''), '-', ''), ' ', ''), (0)));
             UPDATE tbl_GroupChat
               SET 
                   tbl_GroupChat.fld_ModifiedAt = @now
             WHERE tbl_GroupChat.fld_Id =
             (
                 SELECT i.fld_Id
                 FROM inserted i
             );
     END;

当我执行像UPDATE tbl_GroupChat SET fld_IsUpdated = 1;这样的更新查询时,SSMS显示了下面的错误:

代码语言:javascript
复制
Msg 512, Level 16, State 1, Procedure UpdateFieldDate_GroupChat, Line 5 [Batch Start Line 0]
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
The statement has been terminated.

我测试了许多触发器的结构,但它们都有相同的错误,例如,对于下面的代码,我不声明变量:

代码语言:javascript
复制
 tbl_GroupChat.fld_ModifiedAt = (CONVERT([BIGINT], replace(replace(replace(CONVERT([VARCHAR](19), GETDATE(), (121)), ':', ''), '-', ''), ' ', ''), (0)))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 10:42:37

在这里:

代码语言:javascript
复制
IF
     (
         SELECT i.fld_IsUpdated
         FROM inserted i
     ) = 1

但是,fld_IsUpdated表有多个行,因此select是一个完整的表。表不能与单个值相比较。

试试这个:

代码语言:javascript
复制
ALTER TRIGGER [dbo].[UpdateFieldDate_GroupChat] ON [dbo].[tbl_GroupChat]
AFTER UPDATE
AS
    SET NOCOUNT ON;

    BEGIN
        DECLARE @now BIGINT= (CONVERT([BIGINT], replace(replace(replace(CONVERT([VARCHAR](19), GETDATE(), (121)), ':', ''), '-', ''), ' ', ''), (0)));

        UPDATE t 
        SET tbl_GroupChat.fld_ModifiedAt = @now
        FROM tbl_GroupChat as t
        INNER JOIN inserted i ON t.fld_Id=i.fld_Id
        WHERE i.fld_IsUpdated=1
     END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55119481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档