Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 更新时MSSQL触发器:支持多行更新_Sql Server_Tsql_Database Trigger - Fatal编程技术网

Sql server 更新时MSSQL触发器:支持多行更新

Sql server 更新时MSSQL触发器:支持多行更新,sql-server,tsql,database-trigger,Sql Server,Tsql,Database Trigger,我有一个在表更新时触发的SQL触发器。更新表时,它会修改另一个表中的某些字段 它似乎在工作,但我不确定我设置状态的方式是否正确(如果inserted包含多行)。我测试了它并得到了正确的答案(但我仍然怀疑这不是正确/最好的方法) 我认为正确的解决方案是: UPDATE myNewTable SET [LastModifiedDate] = GETDATE(), [Status] = ***<add logic here&

我有一个在表更新时触发的SQL触发器。更新表时,它会修改另一个表中的某些字段

它似乎在工作,但我不确定我设置状态的方式是否正确(如果inserted包含多行)。我测试了它并得到了正确的答案(但我仍然怀疑这不是正确/最好的方法)

我认为正确的解决方案是:

UPDATE myNewTable SET        [LastModifiedDate] = GETDATE(),
                             [Status] = ***<add logic here>***,
                             [Type] = inserted.Type
FROM inserted
WHERE ([id] = inserted.id)
更新myNewTable集[LastModifiedDate]=GETDATE(),
[状态]=********,
[类型]=插入的.类型
从插入
其中([id]=inserted.id)

您需要这样的东西:

CREATE TRIGGER [dbo].[myTrigger]
    ON [dbo].[myTable]
    AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE 
        myNewTable 
    SET
        LastModifiedDate=GETDATE(),
        Status= 
            CASE 
                WHEN i.currentStatus IN (1,3,5) THEN 1
                WHEN i.currentStatus IN (8,9) THEN 8
                WHEN i.currentStatus IN (11,12,13) THEN 11
                ELSE NULL -- if the current status isn't in the cases above
            END,
        Type=i.Type
    FROM 
        myNewTable AS mnt
        INNER JOIN inserted AS i ON
            i.id=mnt.id;
END

select@OldStatus=[currentStatus]FROM INSERTED
>>这是错误的。您正在分配最后一个
[currentStatus]
,该值是从
插入的
表上的
选择
返回的。
CREATE TRIGGER [dbo].[myTrigger]
    ON [dbo].[myTable]
    AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    UPDATE 
        myNewTable 
    SET
        LastModifiedDate=GETDATE(),
        Status= 
            CASE 
                WHEN i.currentStatus IN (1,3,5) THEN 1
                WHEN i.currentStatus IN (8,9) THEN 8
                WHEN i.currentStatus IN (11,12,13) THEN 11
                ELSE NULL -- if the current status isn't in the cases above
            END,
        Type=i.Type
    FROM 
        myNewTable AS mnt
        INNER JOIN inserted AS i ON
            i.id=mnt.id;
END