物件結構提示與浮動預覽
兩個互不影響的表面:滑鼠停留的小提示,與可捲動、可複製的浮動結構預覽。 殼層與擺放見浮動預覽,操作與縮放見預覽互動, 共用外觀見自製 UI 準則。
物件結構提示
滑鼠停留在資料表、檢視、預存程序或函式的名稱上,顯示物件種類、完整名稱、 欄位總數與前 8 個欄位的型別與旗標。旗標有哪些、叫什麼只有 Metadata/Formatting/SqlColumnPresentation 一份,提示與預覽一起變。 支援方括號、雙引號與結構描述限定;暫存資料表、資料表變數與 CTE 見 指令碼宣告的物件。
物件與資料行的 MS_Description 寫在種類那一行底下。它跟著第二層一起回來 (理由見 metadata.md),不必先打開結構。提示視窗不會自己斷行, 說明因此先收斂空白再截短(Metadata/Formatting/SqlDescriptionText), 全文留給捲得動也有 Tooltip 的浮動預覽。
停留在別名上會顯示它所指的資料表;停留在 u.Name 的欄位上則顯示該欄位的 型別與屬性。限定詞確實是資料來源但查無該欄位時不顯示提示, 不會退回去猜同名的資料庫物件。
沒寫限定詞的欄位也認得,否則同一個欄位加個別名才答得出來,差別只在使用者多打 兩個字。它排在物件解析之前:SELECT Branch FROM dbo.Loan 停在 Branch 上時要的是 那個欄位,不是同名的 dbo.Branch。四道限制讓它不搶別人的答案——停在資料來源那一段 名稱上時它是物件;保留字裸寫不可能是欄位([Key] 則是);兩個來源都有同名欄位時 T-SQL 自己也判不出來,就不猜;任一來源的明細未載入、或衍生資料表無法比對時, 也不讓已載入的來源勝出,更不退回同名物件。限定欄位認出來源後同樣禁止借用本機物件。
跨資料庫的來源逐個換到它自己那個目錄再比對,與建議清單同一條規則;換不到才算 未載入,絕不拿本機同名的表頂替。只認目前連線的症狀是 LibArchive.dbo.Loan l 之後 l.CopyNo 停上去什麼都沒有,而建議清單列得出來;未限定的欄位更慘——敘述裡只要有 一個跨庫來源,整段判斷就跟著放棄。
UPDATE a SET … FROM dbo.Loan a 的 a 是別名不是第三張表,由 Core/Parsing/SqlScopeAnalyzer 認掉。多收那個不存在的名稱等於讓「有來源解析不出來」 永遠成立,症狀是 SET | 一律沒有提示。
提示刻意只給一眼看得完的份量。提示視窗不能捲動也不能選取,放再多也讀不完, 所以最後一行是可點擊的**「開啟完整結構」**,看不完的那一半交給浮動結構預覽。 名稱用字重辨識,種類與數量放次要摘要;名稱、明細、入口之間由原生容器留白,列內仍緊湊。 QuickInfo 與補全說明保留 SSMS 原生分類字型及主題,不套用 preview.fontSize; 明細尚未就緒時,即使有完整結構入口也顯示載入狀態。
這條路徑在滑鼠移動的軌跡上,因此只讀快取、不等待查詢:物件清單未載入時 排程背景預載,下一次停留即可辨識;只有欄位明細缺少時,先顯示標題與完整結構連結。 未限定的欄位要比對來源明細,缺席時同樣只排預載;F12 與 Ctrl+F12 等得起查詢, 會先把這條敘述的來源明細補齊再判斷一次,同一個名稱的答案才不取決於快取剛好載過。 新查詢頁面也會背景預載目前資料庫的物件名稱,所以直接貼上 SQL 不必先開建議清單。 連線只用現成目錄,不在 Hover 呼叫端向 SSMS 詢問目前連線,避免 UI 執行緒排隊。
重複停留只快取識別字與敘述範圍的語法分析,每次仍比對當下的物件清單及欄位明細。 清快取、背景載入及連線更新都不必修改 SQL 文字才能恢復;查無物件不會永久記住。
浮動結構預覽
四條入口共用同一個視窗:建議清單開著時按向右鍵、滑鼠停留提示裡的 「開啟完整結構」、按住 Ctrl 點物件名稱(見點擊導覽)、以及按 Ctrl+F12 或選擇 「工具 → SqlAssist → 顯示游標處物件的結構」。
| 分頁 | 內容 |
|---|---|
| 欄位 | 序號、名稱、型別、旗標徽章、說明、計算運算式(含 PERSISTED)、預設值 |
| 索引 | 名稱、種類、索引鍵與排序、INCLUDE、篩選條件、非預設選項與停用、檔案群組或分割配置 |
| 外來鍵 | 名稱、欄位對應、ON DELETE/ON UPDATE 動作 |
| 條件約束 | CHECK 的名稱、資料行、運算式,以及停用/NOT FOR REPLICATION/系統命名 |
| 觸發程序 | 名稱,以及停用或取不到定義 |
| 參數 | 模組類物件的順序、參數與 OUTPUT 標示 |
| 指令碼 | 可直接執行的完整 CREATE 指令碼,有 T-SQL 語法著色 |
內建名稱(函式、系統程序、語句……)換成範例與對照表兩種分頁,見內建說明; 片段換成實際插入的那一份指令碼,見片段。
分頁的宣告、空欄收合與欄寬上限見預覽互動。
滑鼠停留提示對同義字與序列直接顯示那段 CREATE,而不是「Synonym [dbo].[syn_Loan]」 ——後者說不出它指向誰,而那是使用者把滑鼠停在同義字上時唯一要問的事。 提示畫的是同一份 Definition,不是自己再組一次:兩份格式的症狀是提示與 F12 開出來的指令碼寫法不同,而且沒有任何徵兆。
指令碼分頁在資料不齊時交出什麼(模組、同義字與序列、資料表型別,以及一個欄位都 沒有或第四層失敗的那兩種)見指令碼產生。 第四層失敗時欄位仍照畫,但抬頭多一顆「索引與外來鍵讀取失敗」的警示膠囊,Tooltip 說 原因在診斷紀錄檔(需開啟詳細記錄)——那是使用者唯一看得到的線索。
只有第二層時仍可閱讀欄位,但複製完整指令碼只給載入中的註解,不產生缺索引的 DDL。
空的分頁不會出現。抬頭只有名稱那一列,後面接膠囊,順序與 SQL Search 清單列相同: 種類(圖示+文字,辨識不只靠圖示)、主索引鍵、載入或失敗狀態。主索引鍵是整個視窗唯一的 強調色,只列欄名(CopyNo, Branch);排序方向屬於索引那一頁,總覽裡每一次都寫 ASC 只是雜訊。資料表沒有主索引鍵時那一顆改成中性的「沒有主索引鍵」——堆積表值得說。
規模寫在分頁標籤上(欄位 23、索引 3、觸發程序 1),不另起一行摘要:「有幾個索引」 與「索引在哪一頁」是同一件事,寫兩次只是多佔一列。觸發程序因此不必特地進摘要—— 有它,標籤上就看得到。分頁與 SQL Memory 是同一種分頁(SqlAssistChrome.CreateTab),名稱前面是那一種物件在 補全清單上的同一顆原生圖示。
資料表描述排在名稱底下一行,淡色、單行、全文在 Tooltip 裡;沒有掛說明時整列收掉, 不留一條空白撐高標題。內建名稱的寫法排在描述上面,收著時只留第一行——MERGE 的寫法有七行, 攤開就把分頁擠到視窗下半。有東西收著(寫法不只一行,或任一段放不進一行)時,兩段最後一行的 尾端出現「更多」連結(CreateLinkButton),攤開後換成「收起」,一個管兩段;展開狀態所有預覽共用, 換一項不收回。不用單獨一顆箭頭:它讀起來是「進入」或「下拉選單」,而連結就貼在字被截斷的地方。 沒收著東西就不出現:一行寫完的 smallint 不該跟著一個按了沒反應的「更多」。底部那一條留給操作之後的回饋,平常是空的。