sql-server - Visual Studio 2019 和 SQL Server 2019 - 临时表不可见,但 SQL 表示它们已经存在
问题描述
我最近将我的 SQL Server 和 Visual Studio IDE 升级到了 2019 版本。遇到了一些新行为,无法找到解决我的问题的方法。我在 VS 中创建了一个使用本地临时表的存储过程,并遇到了停止调试器的错误。我期待 VS 自动关闭并删除临时表,以便修复错误后,我可以继续工作。显然,这并没有发生,因为一旦我重新启动 SQL 调试器,它就会抱怨临时表已经存在。我在 tempdb 数据库中查找它们,它们不存在,但我继续收到此消息。
我已经完成了通常的工作,编写了一个查询以按名称列出临时表,但没有显示任何内容。按 ObjectID 搜索,什么也没有。关闭我的连接并退出VS,重新启动,问题仍然存在。我什至重新启动 SQL Server 认为某些维护任务可能会清理临时表。没运气。
由于它们是名称如#table1 #table2 的本地临时表,并且我使用管理员帐户登录到我的域,因此我将查询更改为使用名称如##table1、##table2 的全局临时表。再次重新启动 SP,它仍然抱怨表存在。所以我以管理员身份登录到 SQL Server 并再次在 tempdb 中查看,除了 SQL Server 用于自己工作的东西外,什么都没有。
以为我可以通过简单地为我的临时表使用完全不同的名称来解决这个问题,我更改了我的 SP,重新启动了调试器,然后看,它告诉我这些临时表,现在在第一次使用时具有不同的名称,已经存在.
现在我感觉有点偏执,就像我的服务员知道我在想什么,并且为了咯咯笑和笑容而与我开玩笑。我没有想法,可以伸出援助之手。WTF 正在进行第一次使用时的新表名将恢复为已经存在?
3 个临时表中的每一个的代码如下所示。
CREATE TABLE #MsgFailureLogs
(
[SourceLogId] [int] NULL,
[SmtpConversationId] [int] NULL,
[SmtpExLogId] [int] NULL,
[SmtpDebugId] [int] NULL,
[HostIp] [varchar](25) NULL,
[HostName] [varchar](150) NULL,
[HostDomain] [varchar](150) NULL,
[Socket] [int] NULL,
[ClientIp] [varchar](25) NULL,
[ResponseCode] [varchar](50) NULL,
[Explanation] [varchar](500) NULL,
[MsgDate] [datetime] NULL,
[LogEntryType] [varchar](50) NULL,
[MsgID] [varchar](50) NULL,
[Message] [varchar](500) NULL,
[ErrorCode] [varchar](25) NULL,
[LineNumber] [int] NOT NULL,
);
提前致谢。
解决方案
我已经解决了我的问题,但目前无法解释原因。我在 2 个较大的临时表上注释掉了 create temp table 语法,第三个只有 1 个字段和 int。在没有这些预定义表结构的情况下运行 sql 查询,它没有抱怨临时表已经存在。有趣的是,具有单个 int 字段的第三个表是在代码中预定义的。所有表都使用 SELECT INTO 或 INSERT INTO。为什么口译员不抱怨一张桌子而是抱怨其他桌子,现在还是个谜。我一直在使用 LINQ,所以我猜这是 SQL 2019 或 VS 2019 的新行为。或者我多年来只是忘记了这些细节。感谢您的反馈。
推荐阅读
- python - 使用 Python SDK 验证“DefaultAzureCredential()”?
- c++ - 当它们离开函数范围时,还有其他方法可以破坏对象吗?
- assembly - 在 MIPS 汇编中打印和读取浮点数
- positioning - 从中心缩放 konva 图像并在重绘时保持位置
- amazon-web-services - 具有 EC2 实例的 EBS 卷的 IAM 策略
- vb.net - System.NullReferenceException 与 datagridview
- c# - Service Fabric 远程处理异常 -> 从 v1 升级到 v2
- google-chrome - 使用“未定义”时的 Javascript 断点
- java - Javafx鼠标事件y坐标偏移在子场景中不正确
- cmake - 为什么设置 -DVPCKG_TOOLCHAIN_FILE 可以让我找到包,而 set(VCPKG_TOOLCHAIN_FILE ...) 不能?