Scope_Identity()之后的审计跟踪插入时出现SQL错误

时间:2010-09-02 23:05:31

标签: sql sql-server sql-server-2005 tsql

我正在尝试使用存储过程在主表上执行插入,然后还将该数据插入到历史数据表中。我不想使用触发器,而只是将所有列的简单插入到历史表中。但是,我收到了这个错误。

“只有在使用列列表且IDENTITY_INSERT打开时,才能指定表'ipaudittrail'中标识列的显式值。”

我想这与Scope_Identity()有关?但我并不精通SQL,所以我不确定解决这个问题的最佳方法。任何建议表示赞赏。谢谢!

Insert Input
  (OpenedByName, Owner, Description, WorkOfDate)
Values 
  (@vOpenedByFirstName, @vOwner, @vDescription, @vWorkOfDate)

Set @vRecID = Scope_Identity()

Insert InputAuditTrail 
Select * 
  From Input 
 Where RecID = @vRecID

Select * 
  From Input     
 Where i.RecID = @vRecID

2 个答案:

答案 0 :(得分:4)

您的审计跟踪表不应在其RecID列上设置标识属性,因为您不希望它独立地自动增加。您需要更改表定义以反映该内容。

完成后,您可以使用OUTPUT子句。

Insert Input(OpenedByName,Owner,Description,WorkOfDate)
OUTPUT inserted.* INTO InputAuditTrail /*Inserts to Audit Table*/
OUTPUT inserted.* /*Returns to Client*/
Values (@vOpenedByFirstName,@vOwner,@vDescription,@vWorkOfDate)

答案 1 :(得分:1)

Insert InputAuditTrail Select * From Input Where RecID = @vRecID

这会返回一些列,其中一列正在尝试写入InputAuditTrail的标识列。

替换语句
Insert InputAuditTrail(col1, col2, ./...) Select cola, colb, .... From Input Where RecID = @vRecID