sql - 当另一列更新时如何使用更新一列?

标签 sql sql-server sql-server-2012

我有一个表 de,它有 3 列 id(主键 int)、A(int) 和 B(int)。

我的要求是当 A 有更新时更新 B。

所以我使用了触发器并尝试如下

 create trigger deTrigger on [dbo].[de]
 for update
 As
 declare @aValue int;
 select @aValue=i.A from inserted i;
 update de set B =@aValue 
 GO

但我不知道如何在上面的更新查询中使用 where 条件,因此每当我更新单个记录中的 A 时,B col 的所有行都会更新。

如果有使用触发器的替代方法,也请提出建议

最佳答案

你需要这样的东西:

CREATE TRIGGER deTrigger 
ON [dbo].[de]
FOR UPDATE
AS
    UPDATE de 
    SET B = i.A
    FROM Inserted i
    INNER JOIN Deleted d ON i.ID = d.ID
    WHERE i.ID = de.ID
      AND i.A <> d.A
 GO

基本上,您需要加入Inserted伪表(因为它可能包含多行),并且您还需要加入到 Deleted 伪表。比较 InsertedDeleted 中的值,您可以获取对 A 列进行了更新的行,并通过这些行,您可以设置de 表中 B 的值

关于sql - 当另一列更新时如何使用更新一列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29443076/

相关文章:

java - 使用 jTDS 连接到 SQL Server 2012 可用性组监听器

python - 使用 Sqlite 将自动递增 ID 列添加到现有表

python - pandas 创建新列并将其添加到 sql 数据库

mysql - GROUP BY 的 SQL 语句

sql-server - 如何使用SQL重启sql server 2012

sql - Windows SQL 数据库行顺序?

sql-server-2012 - Ctrl R 在 SQL Server 2012 中不起作用

php - 如何有效地将 1 行与数据库中的所有其他行进行比较

sql - 从表中获取 TIME 数据类型 (MSSQL08) 的 SUM

sql-server - 如何在SQL Server 2008中使用GUID数据类型?