2
这是在SQL Server 2005PK违反
我有一个地址表:
dbo.Address
(
AddressID INT IDENTITY(1, 1) PRIMARY KEY
LastUpdateBy VARCHAR(30)
<bunch of address columns>
)
我也有一个历史表:
dbo.AddressHistory
(
AddressID INT,
AsOf DATETIME,
UpdateBy VARCHAR(30)
<all the address columns>
CONSTRAINT PK_dbo_AddressHistory PRIMARY KEY CLUSTERED (AddressID, AsOf)
)
我有一个触发dbo.Address在INSERT和UPDATE上创建历史记录条目,它将基本上这样做:
INSERT INTO dbo.AddressHistory(AddressID, AsOf, UpdateBy, <address columns>)
SELECT AddressID, CURRENT_TIMESTAMP, @UpdateBy, <address columns>
FROM INSERTED
但是,每过一段时间,我都会对dbo.AddressHistory抱怨一个插入PK的重复PK。如果AddressHistory的PK的一部分是插入的当前时间戳,这怎么可能?
即使执行,这将插入两行成功的历史表:
INSERT INTO dbo.Address
(LastUpdateBy, <address columns>)
SELECT 'test', <address columns>
FROM dbo.Address
WHERE AddressID < 3
而唯一的更新存储过程我对dbo.Address表将更新为给定的AddressID一行。所以它应该只是一次更新一行。我的插入代码片段一次只能插入一行。
任何想法是什么情况导致这种情况发生?
@Joe:CURRENT_TIMESTAMP变为3.33毫秒,如GETDATE() – gbn
您是否有UPDATE触发器? – gbn
是触发器在UPDATE和INSERT上,对不起。编辑... – Tedderz