简化代码
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
这在同一架构中是不允许的。约束名称在同一架构中必须是唯一的。