Sql-Server
數據庫中已經有一個名為 PK_MyPrimaryKey 的對象(臨時表上的主索引)
簡化程式碼
var sql = @" create table #Temp( int Id NOT NULL CONSTRAINT [PK_TempId] PRIMARY KEY (Id) ) insert into #temp(id) select (Id) from SomeOtherTable select Id from #Temp " using (var db = new MyDbContext()) { var results = db.Database.SqlQuery<int>(sql).ToList(); return results; }
導致間歇性錯誤
There is already an object named PK_TempId in the database
我已經添加了
drop table #temp
並且正在等待查找是否可以解決問題。
在我添加索引之前,程式碼執行多年沒有任何問題,也沒有明顯需要刪除臨時表。
我在這裡找到了一個建議,即不應在臨時表中使用命名索引。但我不確定有什麼替代方案。
正如 Denis 在評論中指出的那樣,如果您從
CREATE TABLE
腳本的主鍵部分刪除名稱,它應該可以工作。這是因為您使用的名稱已在其他地方用作主鍵。這是因為名稱
PK_TempId
是在另一個表上定義的,如果上面的程式碼同時執行兩次,則該表可能是完全不同的表,也可能是表的第二個實例,#Temp
這在同一架構中是不允許的。約束名稱在同一架構中必須是唯一的。