Это в SQL Server 2005.
У меня есть таблица адресов:
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
Но, время от времени, я получаю нарушение PK для dbo.AddressHistory с жалобойвставляется дубликат ПК.Как это возможно, если часть PK для AddressHistory является текущей отметкой времени вставки?
Даже при ее выполнении две строки успешно добавляются в таблицу истории:
INSERT INTO dbo.Address
(LastUpdateBy, <address columns>)
SELECT 'test', <address columns>
FROM dbo.Address
WHERE AddressID < 3
И толькообновить sproc у меня для таблицы dbo.Address будет обновлять строку для данного AddressID.Таким образом, он должен обновлять только одну строку за раз.Моя вставка sproc также вставляет только одну строку за раз.
Есть идеи, из-за каких условий это происходит?