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