Sql server TSQL触发器未知列
我有一个有31列的表 主机场,人事部,a1,a2,a3,a4。。。 在a1-a31字段中是值。软件每月自动生成一行。 用户现在可以从软件更新字段或删除它(更新为NULL)Sql server TSQL触发器未知列,sql-server,tsql,triggers,compare,Sql Server,Tsql,Triggers,Compare,我有一个有31列的表 主机场,人事部,a1,a2,a3,a4。。。 在a1-a31字段中是值。软件每月自动生成一行。 用户现在可以从软件更新字段或删除它(更新为NULL) 但是现在我需要一个触发器,它为每个更改的字段在新表中插入一个。问题是比较前一行和更改的行。当用户更新行时,如何获取已更改的字段?以下是一些可以运行的代码: CREATE TRIGGER TriggerName --The name of your trigger ON Table1 --The table where the
但是现在我需要一个触发器,它为每个更改的字段在新表中插入一个。问题是比较前一行和更改的行。当用户更新行时,如何获取已更改的字段?以下是一些可以运行的代码:
CREATE TRIGGER TriggerName --The name of your trigger
ON Table1 --The table where the update happens
AFTER UPDATE
AS
INERT INTO --you new tabe namegoes here
()--your new table fields go here
SELECT --only the fields you have in the parenthesis above in the same order
FROM Inerted I
大多数触发器的方式是,一旦插入、更新或删除一个值,触发器就会有一个特殊的值。在本例中,fr update和inserted操作称为inserted,该表将获取输入的最新值。在SQL Server触发器中,您可以访问
插入的
和删除的
伪表;它们保留已修改的数据:第一个存储新值,第二个存储旧值
CREATE TRIGGER [dbo].[MyTableUpdate
ON [dbo].[MyTable]
AFTER UPDATE
AS
IF @@ROWCOUNT = 0
RETURN
IF NOT UPDATE (a1) AND NOT UPDATE(a2) AND NOT UPDATE(a3) AND NOT UPDATE...
RETURN
SELECT YourCOlumns FROM Inserted
SELECT YourColumsn FROM Deleted
--Compare the values as you prefer
谢谢大家帮助我。 早上,当我站起来时,我有了一个想法:) 重点是: 1.声明和设置变量:
DECLARE @ai1 VARCHAR(30);
DECLARE @ad1 VARCHAR(30);
....
SET @ai1 = (SELECT a1 from inserted);
SET @ad1 = (SELECT a1 from deleted);
...
这就是诀窍。但是非常感谢大家 你可以用扳机代替扳机。然后可以比较表中的值(旧)和插入的值(新)。然后,您必须使用inserted来进行插入,因为使用inserted而不是会停止插入。理想情况下,您可以更改表格设计。相同“类型”的数据应存储在同一列中。添加一个额外的列,以便当前嵌入在列名中的日数可以在数据中正确地占据其位置。将数据的数据透视放在电子表格布局中,交给报表处理器处理。这是一个坏的触发器<代码>插入的和
删除的
可能包含0行、1行或多行。在后一种情况下,您甚至不能保证@ai1
和@ad1
已从行前/行后的“相同”赋值。