簡體   English   中英

Visual Studio 2019 和 SQL Server 2019 - 臨時表不可見,但 SQL 表示它們已經存在

[英]Visual Studio 2019 and SQL Server 2019 - Temp tables not visible but SQL says they already exist

我最近將我的 SQL 服務器和 Visual Studio IDE 升級到 2019 版本。 遇到了一些新行為,無法找到解決我的問題的方法。 我在 VS 中創建了一個使用本地臨時表的存儲過程,並遇到了停止調試器的錯誤。 我期待 VS 自動關閉並刪除臨時表,以便修復錯誤后,我可以繼續工作。 顯然,這並沒有發生,因為一旦我重新啟動 SQL 調試器,它就會抱怨臨時表已經存在。 我在 tempdb 數據庫中查找它們,它們不存在,但我繼續收到此消息。

我已經完成了通常的工作,編寫了一個查詢以按名稱列出臨時表,但沒有顯示任何內容。 按 ObjectID 搜索,什么也沒有。 關閉我的連接並退出VS,重新啟動,問題仍然存在。 我什至重新啟動了 SQL 服務器,認為一些維護任務可能會清理臨時表。 沒運氣。

由於它們是名稱如#table1 #table2 的本地臨時表,並且我使用管理員帳戶登錄到我的域,因此我將查詢更改為使用名稱如##table1、##table2 的全局臨時表。 再次重新啟動 SP,它仍然抱怨表存在。 所以我以管理員身份登錄到 SQL 服務器並再次在 tempdb 中查看,除了 SQL 服務器用於自己的工作之外,什么都沒有。

以為我可以通過簡單地為我的臨時表使用完全不同的名稱來解決這個問題,我更改了我的 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 的新行為。或者我多年來只是忘記了這些細節。 感謝您的反饋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM