翻譯|使用教程|編輯:莫成敏|2020-04-14 15:21:56.083|閱讀 313 次
概述:本教程發現了使用SQL Prompt代碼段消除重復執行各種任務的樂趣,這些任務從插入注釋標頭、創建表到執行有用的元數據查詢。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
SQL Prompt根據數據庫的對象名稱、語法和代碼片段自動進行檢索,為用戶提供合適的代碼選擇。自動腳本設置使代碼簡單易讀--當開發者不大熟悉腳本時尤其有用。SQL Prompt安裝即可使用,能大幅提高編碼效率。此外,用戶還可根據需要進行自定義,使之以預想的方式工作。
本教程發現了使用SQL Prompt代碼段消除重復執行各種任務的樂趣,這些任務從插入注釋標頭、創建表到執行有用的元數據查詢。本文為該教程后半部分內容,內容緊接前文!
用于創建對象的代碼片段
每當我創建數據庫對象時,無論出于何種原因,該任務通常都會包含一些“重復元素”。例如,當我創建一個表時,它幾乎總是具有某些共同的特征,或者每次執行任務時(例如,提取最近添加到表中的所有行以進行報告),我經常需要相同的對象集。
一旦我開始思考我經常執行的任務,有關片段的想法就開始堆積起來!
更有用的“創建表格”代碼段
當然,我創建的每個新表的名稱和總體結構都不同,但是我們創建的每個表都包含以下共同要求:
CREATE TABLE $SchemaName$.$TableName$ ( $TableName$id int NOT NULL CONSTRAINT PK$TableName$ PRIMARY KEY, RowCreatedTime datetime2(0) NOT NULL CONSTRAINT DFLT$TableName$$RowCreatedTime DEFAULT(SYSDATETIME()), RowLastModifiedTime datetime2(0) NOT NULL CONSTRAINT DFLT$TableName$$RowLastModifiedTime DEFAULT(SYSDATETIME()) ) WITH (DATA_COMPRESSION = PAGE);
占位符為$SchemaName$和$TableName$,后者重復多次。調用代碼段,輸入架構名稱,然后開始輸入表名稱,在這種情況下,我將其稱為NewTable:
當您編輯一個占位符實例時,它們全部都會改變!完成輸入名稱,然后按Enter:
我可能不會按原樣使用代理鍵,但是我肯定會在表上有一個主鍵,它將根據此代碼段中建立的標準進行命名。在我創建的大多數表中,我還將需要RowCreatedTime和RowLastModifiedTime列。在過去的五年中,我以相同的模式手動創建了數百個(即使不是數千次)默認約束。
自然地,創建表的其余大部分并不是公式化的,無法做成一個片段,但是該片段提供的是通用的重復部分的通用框架。我還創建了列摘要,它們將定義必要的DEFAULT,CHECK或FOREIGN KEY約束及其命名約定(通常包括表名,也許還包括列名)。了解產品信息,請咨詢
監視表中創建的行的代碼段下一個示例來自一個項目,在該項目中,我必須準備關于一組表上發生的新活動的每日報告。對于每個表,這需要幾個存儲過程來獲取并保存在特定日期之后添加到基表中的行,以及一個用于存儲結果以供報告的“ UsedRows ”表。
對于代碼段而言,這是另一項完美的任務,因為盡管替代鍵的名稱和數據類型可能會發生變化,但我們基本上使用同一組對象來獲取每個表的數據。
這是代碼段的代碼:
請注意,這些代碼片段足夠聰明,可以處理在對象名稱和字符串中使用$字符,這是我個人命名風格的一個功能。 參數名稱的名稱字符中不得包含空格,但是,如果命名標準要求多個$字符而不包含空格字符,則可能會出現問題。了解產品信息,請咨詢
執行實用程序代碼的工具
當我開始研究如何使用代碼片段時,想到的第一件事就是使用它們來執行我經常執行的代碼,這些代碼是從源代碼控制中保存的文件中執行的,通常用于回答有關實例狀態或元數據的問題。我想出了兩種方法來做到這一點,并且我都成功地運用了這兩種方法。
SQLCMD“剪貼板”代碼段
因此,假設您有一整套有用的元數據查詢,所有這些查詢都可以“按原樣”運行,并且每個查詢都存儲在變更管理系統(GitHub,Dropbox等)中的單獨文件中,并且與團隊共享。作為一個非常簡單的示例,其中一個可能是一個名為CheckLoginSystemCount.sql的文件,該文件報告了SQL Server 的登錄計數。
SELECT login_name, COUNT(session_id) AS session_count FROM sys.dm_exec_sessions GROUP BY login_name;
我不需要在每個文件中四處尋找,而是創建了一個片段,該片段實際上只是SQLCMD :r命令的列表,每個都指向包含這些元數據查詢之一的文件。
名稱:querylist
/****************************************************** Execute queries stored in file system. Use SQLCMD mode to run ******************************************************/ --Use EXIT to make sure you don't accidentally execute everything. EXIT --in SQLCMD mode will stop processing EXIT --Check login count :R E:\Dropbox\Projects\PerformanceTools\CheckLoginSystemCount.sql EXIT --List locks on the instance :R E:\Dropbox\Projects\PerformanceTools\ListInstanceLocks.sql EXIT --Return size of current database files :R E:\Dropbox\Projects\Catalog\ListDatabaseConfigurations.sql EXIT --Other queries... EXIT
現在,當您調用該代碼片段時,在設置為SQLCMD模式的SSMS查詢窗格中,您將獲得文件列表。只需突出顯示:R指向您要運行的文件的行,它將執行文件中的內容。這些EXIT行確保您不會意外執行每個腳本。
調查鎖活動的代碼段
我有幾個相當復雜的DMV查詢,它們經常運行以調查數據庫實例上的當前活動。例如,我有一個查詢來查看數據庫中當前持有的鎖。它取自我和Tim Ford十年多以前寫的關于DMV的書(盡管它有一些很好的查詢仍然是相關的)。
同樣,我曾經在源代碼管理中將它存儲在一個文件中,并根據需要將其搜索出來。90%的情況下,我可以“按原樣”運行它,但是對于其他10%,我需要添加過濾器,選擇不同的列,等等。令人惱火的是,當我關閉窗口時,我總是保存對原始文件的更改(該文件適用于90%的用例!)
我認為創建包含查詢的代碼片段比較容易,也許可以使用代碼片段參數來簡化某些參數的值,然后再運行它。在我的示例中,我為資源類型和SPID設置了占位符,兩者均在代碼段中默認設置為返回所有值。
名稱:locklist
現在,我可以調用鎖定列表代碼片段,執行查詢,提供過濾器或讓它們使用默認值。如果保存查詢,則不會覆蓋模板,并且在提交代碼時,此更改是否重要沒有問題。
請注意,將這樣的復雜查詢提交給源代碼管理仍然很有價值。對于除了最簡單的代碼段以外的所有代碼段,代碼段管理器都不應該是基礎查詢的唯一副本。了解產品信息,請咨詢
總結
片段是硬核程序員通常不好稱呼的那些事情之一,他們主要認為它們太瑣碎,不值得花時間。直到我考慮了如何使用它們來自動化一些重復性任務后,我才意識到它們比我最初預期的更有價值。
我已經演示了幾個簡單但省時的代碼片段,這些代碼片段可以消除多余的擊鍵或創建對象,或者可以輕松地重用源代碼控制文件中存儲的代碼,從而使編碼變得更容易。
相關內容推薦:
SQL語法提示工具SQL Prompt使用教程:使用SQL Prompt代碼段執行重復任務(上)
SQL Prompt使用教程>>>
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自: