我有一个存储过程,该存储过程使用主键创建一个临时表,但是时不时地抛出上述异常。
这在使用实体框架的.NET Web应用程序中发生。除了使用存储过程的报告外,大部分查询都是用LINQ编写的。
我可以肯定地说,报表执行之间的连接不会持久,但是即使是表连接也会被删除,或者出现异常情况表明该表已经存在。
即使表没有键,键也似乎具有全局作用域。
这是创建表的SQL:
DROP TABLE IF EXISTS #BaseEnquiries;
CREATE TABLE #BaseEnquiries (EnquiryId BIGINT NOT NULL, Date DATE NULL, SalesExecId BIGINT NOT NULL, SalesExecName NVARCHAR(100),
DealerId BIGINT NOT NULL, DealerName NVARCHAR(100), FranchiseId BIGINT, FranchiseName NVARCHAR(100),
FirstContactTypeId BIGINT, CustomerId BIGINT NOT NULL, EnquiryDateString NVARCHAR(50), EnquiryDateNumber BIGINT,
CONSTRAINT PK_BaseEnquiries_EnquiryID_DSAR PRIMARY KEY CLUSTERED (EnquiryID));
添加了DROP TABLE来尝试解决问题,但显然没有。
出什么问题了?
答案 0 :(得分:1)
PK_BaseEnquiries_EnquiryID_DSAR
实际上对于tempdb数据库是全局的。
也许您在同一服务器上打开了另一个SQL连接,但该服务器在作用域中仍然具有#BaseEnquiries
表,并具有自己的PK_BaseEnquiries_EnquiryID_DSAR
约束。
正是由于这个原因,在#temp和## temp表上命名约束通常是不好的形式。您可以使用create table #BaseEnquiries (EnquiryId BIGINT NOT NULL PRIMARY KEY, Date DATE, ...