微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Visual Studio 2019 和 SQL Server 2019 - 临时表不可见,但 SQL 表示它们已经存在

如何解决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 正在继续,第一次使用的新表名称会作为已经存在的名称返回吗?

三个临时表的代码如下所示。

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 个较大的临时表上注释掉了创建临时表的语法,第 3 个只有 1 个字段和 int。在没有这些预定义表结构的情况下运行 sql 查询,它没有抱怨临时表已经存在。有趣的是,带有单个 int 字段的第三个表是在代码中预定义的。所有表都使用 SELECT INTO 或 INSERT INTO。为什么口译员不抱怨一张桌子,而是抱怨其他桌子,现在是个谜。我一直在使用 LINQ,所以我猜这是 SQL 2019 或 VS 2019 的新行为。或者我多年来只是忘记了这些细节。感谢您的反馈。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。