数据库中已存在名为"IX_MY_INDEX_NAME"的对象

Joe*_*ank 1 sql sql-server sql-server-2012

每周一次(或左右),我在多线程应用程序中收到以下错误消息:

数据库中已存在名为"IX_MY_INDEX_NAME"的对象.无法创建约束.

有问题的SP创建临时表,如下所示:

--removed for brevity
CREATE TABLE #MyTable
(
    [IndexId] INT UNIQUE IDENTITY (1, 1) NOT NULL,
    [WhateverId] INT NOT NULL,
    [CustomerId] INT NULL,
    [VendorId] INT NULL,
    CONSTRAINT IX_MY_INDEX_NAME UNIQUE (
        WhateverId,
        CustomerId,
        VendorId
    )
)
--removed for brevity
Run Code Online (Sandbox Code Playgroud)

是什么导致这种情况发生?上述陈述不是原子的吗?我错过了什么吗?

Stu*_*rth 7

约束需要在数据库中唯一命名; 在上面的示例中,如果两个线程几乎同时执行,则在创建第二个线程时,可能存在具有该约束的临时表.

要执行您想要执行的操作,请在创建表后创建UNIQUE索引; 索引名称不必是唯一的.