Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 sql而不是update:在特定列上触发_Sql Server_Triggers - Fatal编程技术网

Sql server sql而不是update:在特定列上触发

Sql server sql而不是update:在特定列上触发,sql-server,triggers,Sql Server,Triggers,我一直在想,是否有一种方法可以使用instead of update触发器来更新和记录特定的列,同时对其他列进行常规更新您不能对表的某一部分使用DML触发器。触发器用于整个表 但是,您可以使用而不是触发器,使用您想要的任何逻辑,然后直接使用插入的中的数据更新表 一个简单的例子: create table myTable ( colId int identity(1,1), col1 int, col2 varchar(10) ) go create trigger t

我一直在想,是否有一种方法可以使用instead of update触发器来更新和记录特定的列,同时对其他列进行常规更新

您不能对表的某一部分使用DML触发器。触发器用于整个表

但是,您可以使用
而不是
触发器,使用您想要的任何逻辑,然后直接使用插入的
中的数据更新表

一个简单的例子:

create table myTable
(
    colId int identity(1,1),
    col1 int, 
    col2 varchar(10)
)
go

create trigger t_iou on myTable instead of update
as
     update t
     set col1 = i.col1,
         col2 = i.col2 + ' ('+ cast(i.col1 as varchar) +')'
     from myTable t
     inner join inserted i on(t.colId = i.colId)
go

可能是这种情况下最好的方法-计算列…使用而不是触发器,这样您可以始终将特定列更新为choosen值,其余部分可以从虚拟表中插入,而且这不需要回滚更新的数据。我如何才能做到这一点?你能给我举个例子吗?