如果列已更新,则使用UPDATE()检查器的变量

And*_*doc -1 sql t-sql sql-server sql-update

是否可以在UPDATE()中使用一个变量来检查列是否更新?

这是我的示例代码:

DECLARE @ColumnCount int
DECLARE @ColumnCounter int
DECLARE @ColumnName nvarchar(MAX)

SET @ColumnCounter = 0

SELECT @ColumnCount =  COUNT(c.COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS c  WHERE c.TABLE_NAME = 'Province'
    WHILE @ColumnCount >= @ColumnCounter
    BEGIN
       SELECT @ColumnName = c.COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS c  WHERE c.TABLE_NAME = 'Province' AND c.ORDINAL_POSITION = @ColumnCounter
        IF (UPDATE(@ColumnName))
       SET @ColumnCounter = @ColumnCounter + 1
    END
Run Code Online (Sandbox Code Playgroud)

shi*_*mot 5

检查列是否实际更新后更新触发器你可以使用deletedinserted特殊表msdn,其中触发器代码可以找到更新表的行的新旧版本

请记住,每个表中可以找到多于一行的行.例如,你执行update table1 set col1 = value1 where some_condition的触发器行数受影响some_condition,将出现在inserteddeleted表中

要在触发器中查找某些列实际更新的行,您可以在某些主键上连接已插入和已删除的表并比较此列的值

update()函数作为参数列名而不是名称为值的sting变量

例如使用update()触发器中检查 update(some_column)是当真正some_column出现在更新set语句中,偶数列的值不改变.

好像你不能写通用触发器来计算更新的列数,如果你需要那个计数你需要手动为每个表写一个触发器,像这样

declare @count int = 0
if update(col1) set @count = @count + 1
if update(col2) set @count = @count + 1
...
Run Code Online (Sandbox Code Playgroud)

  • 计算"已更新"列的另一种方法是计算[`Columns_Updated()`](https://docs.microsoft.com/en-us/sql/t-sql/functions/columns)结果中的设置位 - 更新-的Transact-SQL?视图= SQL服务器-2017).不需要列名称. (2认同)