Código simplificado
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;
}
Causa erro intermitente
There is already an object named PK_TempId in the database
desde então adicionei
drop table #temp
e estou esperando para descobrir se isso resolve o problema.
Antes de adicionar o índice, o código funcionou por anos sem problemas e sem a necessidade aparente de descartar a tabela temporária.
Encontrei uma recomendação aqui de que índices nomeados não devem ser usados em tabelas temporárias. Mas não tenho certeza de qual alternativa existe.
Como Denis apontou nos comentários, se você remover o nome da parte da chave primária do seu
CREATE TABLE
script, deve funcionar. Isso ocorre porque o nome que você estava usando já estava sendo usado para uma chave primária em outro lugar.Isso ocorre porque o nome
PK_TempId
foi definido em outra tabela, que pode ser uma tabela completamente diferente ou uma segunda instância da sua#Temp
tabela, caso seu código acima tenha sido executado duas vezes simultaneamente, o que não é permitido no mesmo esquema.Os nomes de restrição devem ser exclusivos dentro do mesmo esquema .