首页 > 解决方案 > SQL Server 升级导致临时表重复

问题描述

我的公司有一个遇到问题的遗留系统。该代码是 VB6、C# 和 SQL 的组合,其中 SQL 由粘贴到“C#”应用程序中的数千行内联 SQL 组成。许多临时表被创建(和删除)。在代码中找到可能创建或重用临时表的位置并不容易(至少可以这么说)。

使用 SQL Server 2008 R2 运行时,代码按预期运行。但是,在运行 SQL Server 2014 或 SQL Server 2016 时,会收到错误消息“数据库中已经有一个名为 '#whatever' 的对象”。

在 SQL Server 2014 数据库上,数据库的兼容性级别已设置为 SQL Server 2008(100),并且 MAX DOP(我怀疑这是问题的可能根源)已设置为 1。

有没有人经历过类似的事情,如果有,是否有任何已知的解决方法。该系统已有 25 年历史,我们想淘汰该系统,但有些人只是太喜欢它了。

标签: sql-server

解决方案


答案其实很有趣也很简单。开发人员使用了这个功能:

public static bool TemporaryTableExists(string TempTableNameWithHash, DataConnection mDataConnection) { return Convert.ToInt32(mDataConnection.GetValueFromSelect(string.Format("SELECT COALESCE(OBJECT_ID('tempdb.dbo.{0}'),0)", TempTableNameWithHash))) > 0; }

问题是 > 0。在 SQL Server 2014 中,OBJECT_ID 似乎为临时表返回负值。


推荐阅读