我在存储过程中有以下代码,在游标中运行:
IF (OBJECT_ID('tempdb..#newSales','U') IS NOT NULL)
DROP TABLE #newSales
CREATE TABLE #newSales
(
AddressId INT NOT NULL,
ItemId INT NOT NULL,
[Date] DATE NOT NULL,
Sale REAL NULL
)
/* some code here */
ALTER TABLE #newSales
ADD PRIMARY KEY CLUSTERED ([AddressId] ASC, [ItemId] ASC, [Date] ASC)
我会定期收到以下错误(每次名称都不同):
已经有一个名为' PK __#newSale__34CE1EAA297D3472'在数据库中。
我已经检查了类似的问题,但大多数都是明确命名的约束。我无法理解这是如何发生的,因为在这种情况下,PK的名称是自动生成的,理论上它必须是唯一的(即使有多个连接调用此过程)。
可能是错误的来源是什么?
答案 0 :(得分:1)
您应该避免创建并发可能存在问题的临时表,并尝试使用变量表。请尝试以下方法:
DELCARE @newSales TABLE
(
AddressId INT NOT NULL,
ItemId INT NOT NULL,
[Date] DATE NOT NULL,
Sale REAL NULL,
PRIMARY KEY CLUSTERED ([AddressId] ASC, [ItemId] ASC, [Date] ASC)
)
INSERT INTO @newSales
SELECT *
FROM myOtherTables
...