sql-server - 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 年历史,我们想淘汰该系统,但有些人只是太喜欢它了。
解决方案
答案其实很有趣也很简单。开发人员使用了这个功能:
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 似乎为临时表返回负值。
推荐阅读
- python - 使用 pymssql 和 python 字典更新数据库表时出错
- javascript - 使用 PHP 变量并使用 javascript 将数据传递给 window.open
- sql - 用于添加数量并仅显示最新条目的 SQL 代码
- c# - 使用 RSA 公钥加密文本文件
- python-3.x - 如何在 Pandas 中更改数据框的索引
- java - Selinux 在针对 Android 10 时尝试打开相机设备时拒绝
- python-3.x - 如何通过自定义字典重新索引数据框?
- c# - .NET 核心 ASP 控制器中的线程
- javascript - 如何通过将键作为函数参数传递来更改对象的值?
- python-3.x - 使用嵌套键和数组展平字典