CREATE TABLE dbo.SomeTable
(
ID int NOT NULL,
SomeText varchar(10) NOT NULL
) ON [PRIMARY]
GO
ALTER TABLE dbo.SomeTable
ADD CONSTRAINT PK_SomeTable
PRIMARY KEY CLUSTERED (ID)
WITH(STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE PROCEDURE [dbo].[InsertSomeText]
@ID int,
@SomeText varchar(10)
AS
BEGIN
BEGIN TRANSACTION
DELETE FROM SomeTable WHERE ID = @ID
INSERT INTO SomeTable (ID, SomeText)
VALUES (@ID, @SomeText)
COMMIT TRANSACTION
END
上述的存储过程有时会引发错误PRIMARY KEY约束存储过程抛出PRIMARY KEY约束违反
冲突
当在相同称为时间与价值相同@ID
。
删除/插入操作在事务中,所以我认为这将是一个原子操作,但仍然有一段时间它会抛出异常。
没关系与过程是在事务内。如果他们都在同一时间开始,他们都只是试图插入相同的ID。 – DavidG
这可能是一个愚蠢的问题,因为我认为这是一个简化版本,但为什么删除,然后插入时,你可以简单地更新? –
...或者MERGE'声明? –