“FOR UPDATE ... SELECT * FROM删除” 触发复制到表有两个额外的列

我有一个非常简单的触发器,复制当前行的“FOR UPDATE ... SELECT * FROM删除” 触发复制到表有两个额外的列

  • AuthorsAuthorID(PK)AuthorNameBio

  • AuthorsHistoryHistoryID(PK)AuthorIDAuthorNameBiohWhen(dateTime)

hWhen使用getDate()填写其值。

CREATE TRIGGER [dbo].[AuthorHistory] 

ON [dbo].[B_Authors]

FOR UPDATE

AS

INSERT INTO B_AuthorsHistory

SELECT *

FROM deleted

有更多的列,但他们无关紧要。所有列都是相同的类型,相同的空设置,相同的默认值,而不是PK更改。

它完美的工作,但今天我想添加一列。

  • 我试图将它添加到Authors,它立即抛出一个错误,关于触发器中的列表列表。 (我正在使用Select *
  • 我加了第一列到AuthorsHistory,再次尝试Authors,并且它直接提到触发器抛出了一个不同的错误。

我找到解决方法,删除了扳机,调整列,添加了扳机,但我也不得不删除从AuthorsHistory暂时hWhen(这是不是现在的问题,还是构建它)。

另一种选择很可能是针对列名和值。 我在代码中这样做,但我喜欢这样的想法,即使我可以避免更新,也无需更新。

问题:有没有一种方法,我可以用SELECT * **我有一个相同的触发(即“Products ==> ProductsHistory”)上的其他表也这么做?

回答:

依我之见,一个新的列添加到两个表,从而使触发不会失败的唯一办法,是做一个查询这样的:

;disable trigger dbo.AuthorHistory on dbo.B_Authors; 

alter table dbo.B_Authors add NewColumn int null;

alter table dbo.B_AuthorsHistory add NewColumn int null;

;enable trigger dbo.AuthorHistory on dbo.B_Authors;

但是,如果你有高如果任何其他事务会在查询过程中更改dbo.Authors中的数据,则可能会丢失dbo.AuthorsHistory中的一些数据。

以上是 “FOR UPDATE ... SELECT * FROM删除” 触发复制到表有两个额外的列 的全部内容, 来源链接: utcz.com/qa/258285.html

回到顶部