SQL PROMPT5.3.4.1的一些設定選項
SQL PROMPT5.3.4.1的一些設定選項
我使用的是5.3.4.1版本
sql prompt這個工具安裝好之後就可以在SSMS裡使用程式碼提示功能
園子裡非常多的文章:例如SQLSERVER開發利器XXXXXX
http://www.cnblogs.com/VAllen/archive/2012/09/08/SQLPrompt.html
http://www.cnblogs.com/keepfool/archive/2012/05/27/2519839.html
不過大家都是隻提供個軟體下載、怎麼破解sql prompt還有簡單的使用方法,但是具體怎樣使用和設定真的沒有
昨天本人無聊研究了一下SQL PROMPT的設定,發現也有一些學問
大家想想,當我們在網上或者同事丟給我們一個sql程式碼,我們會把程式碼貼上到SSMS裡面看呢,但是每個人寫的程式碼風格不一樣
從網上貼上進來的程式碼會有行號這些,特別程式碼非常長的時候,格式化都不知道怎麼格式化了,這個時候就需要sql prompt的程式碼格式化功能了
使用sql prompt的程式碼格式化功能很簡單,選中你要格式化的程式碼或者你直接在查詢視窗按右鍵-》formate sql,
那麼你選中的那部分程式碼或者整個sql指令碼都會自動formate,這樣就方便自己觀看了。
但是sql prompt預設的程式碼格式化格式可能不適合大部分人,其實sql prompt提供了程式碼格式化的選項設定讓大家去設定,只需要幾分鐘
個人感覺這些設定才是精粹,程式碼提示功能只是一小部分而已,還有sql prompt實驗室提供的創新功能
redgate公司真的厲害,一個簡單sql prompt集成了這麼多功能,可能大家以為我幫redgate公司賣廣告,不過我相信大部分人都是使用破解的吧 o(∩_∩)o
-----------------------------------------------------華麗的分割線-------------------------------------------------------
說一下選單中的選項,基本上選單選項我很少用到,因為裡面全部功能對我本人沒有用,或者對你們有用 呵呵
除了一個非常重要的選項:啟用/禁用程式碼提示功能,SQL prompt共有兩處地方可以設定啟用/禁用程式碼提示功能的開關
一個是這裡,另一個是“option”-》Main-》behavior第一個選項就見到啦
---------------------------------------------------華麗的分割線-------------------------------------------------------------
下面對option選單裡面的選項逐個簡單介紹
-----------------------------------------------華麗的分割線--------------------------------------------------------------
首先是Main->behavior 軟體行為
輸入物件之後馬上顯示物件的定義
其實大家可以按照我的設定去設定,一般我用到的基本上都是大家用到的
------------------------------------------------華麗的分割線------------------------------------------------------------------
Suggestions->types of suggestion 輸入和程式碼提示建議
解密已經加密了的物件還真的有用,比如我加密了一個儲存過程,那麼我想看這個儲存過程是怎麼寫的,使用下面sql語句是看不出的
1 USE [pratice] 2 GO 3 EXEC [sys].[sp_helptext] @objname = N'dbo.creat_test_Encryption'
1 物件 'dbo.creat_test_Encryption' 的文字已加密。
但是使用sql prompt就可以看到儲存過程的內容
Suggestions->join conditions 連線條件
這個表連線的程式碼提示設定,可以根據你輸入的是資料型別還是列名來進行提示,非常方便
例如我輸入的是資料型別,他就會彈出在這個表裡符號你輸入的資料型別的欄位
比如我輸入datetime型別
輸入列名
1 USE [GPOSDB] 2 GO 3 SELECT * FROM [dbo].[CT_FuelingData] AS a INNER JOIN [dbo].[CT_InhouseCard] AS b ON a.[VC_FD_Cardno]=b.[VC_IC_CardNO]
-----------------------------------------------------華麗的分割線---------------------------------------------------------
Inserted Code->Objects&statements 物件和語句
Inserted Code->Qualification 限定名
像我在圖片中說到那樣,不知道為什麼你輸入表名. ,程式碼提示還是會顯示出具有相同列名的表出來
不過這個地方還是有好處的,不如你查一個檢視,但是不知道某個視圖裡的某列的意思
我舉個簡單的例子吧
比如我想知道 [sys].[sysprotects]這個系統檢視中的uid列對應是哪個使用者或角色,但是我不知道哪個表或者檢視包含有uid這個列的
那麼我可以輸入下面語句就會顯示包括uid列的表或者檢視,雖然會顯示多個表都包含這個列,但是你想一下
[sys].[sysprotects]這個檢視會跟使用者、許可權的表有關,那麼很自然就會想到sysuser這個系統檢視
輸入下面的語句關聯看一下就知道uid對應[sysuser]視圖裡的哪個使用者了
1 SELECT a.*, b.[name] 2 FROM [sys].[sysprotects] AS a 3 LEFT JOIN [sys].[sysusers] AS b ON a.[uid] = b.[uid] 4 ORDER BY a.[id]
Inserted Code->Aliases 別名
Inserted Code->Special characters 特殊符號
-----------------------------------------------------華麗的分割線------------------------------------------------------------------------
到程式碼格式化了!!
注意,在Formate這個選項下面的所有設定,都要在查詢編輯器裡選中需要格式化的程式碼 然後右鍵-》formate sql 才看到效果的,
不是你輸入程式碼之後sqlprompt馬上會自動幫你formate,是手動的喔。
Formate->Styles 風格
這裡Styles應該是給你看的,反正我是編輯不了,可以匯出XML格式的style檔案,但是我也不知道怎麼編輯,抱歉抱歉
大家E文比較好的話可以看redgate的官方網站解釋,但是我看了裡面好像沒有說到怎麼編輯,太杯具了~
網站連結:https://documentation.red-gate.com/display/SP53/Options+for+formatting+your+code
匯出的style檔案
1 <?xml version="1.0" encoding="utf-16" standalone="yes"?> 2 <!----> 3 <LayoutOptions version="1" type="LayoutOptions"> 4 <ReservedWordsCasing>1</ReservedWordsCasing> 5 <BuiltInFunctionCasing>1</BuiltInFunctionCasing> 6 <BuiltInDataTypeCasing>1</BuiltInDataTypeCasing> 7 <DelimitIdentifiers>False</DelimitIdentifiers> 8 <IndentationAmount>4</IndentationAmount> 9 <UseTabs>False</UseTabs> 10 <ReformatExpressions>True</ReformatExpressions> 11 <FirstColumnOnNewLine>False</FirstColumnOnNewLine> 12 <CommasAtStart>False</CommasAtStart> 13 <MultilineSpacesAfterCommas>False</MultilineSpacesAfterCommas> 14 <MultilineSpacesBeforeCommas>True</MultilineSpacesBeforeCommas> 15 <MultilineAlignCommasWithStatement>True</MultilineAlignCommasWithStatement> 16 <OperatorsOnNewline>True</OperatorsOnNewline> 17 <OperatorsAtStart>True</OperatorsAtStart> 18 <IndentBeginToken>True</IndentBeginToken> 19 <IndentWithExpressionBrackets>True</IndentWithExpressionBrackets> 20 <IndentWithParameterBrackets>True</IndentWithParameterBrackets> 21 <IndentWithQueryBrackets>True</IndentWithQueryBrackets> 22 <CloseBracketsOnNewLine>True</CloseBracketsOnNewLine> 23 <OpenBracketsOnNewLine>False</OpenBracketsOnNewLine> 24 <Wrap>True</Wrap> 25 <WrapWidth>78</WrapWidth> 26 <ShortLength>15</ShortLength> 27 <CreateBracketsAtStartOfLines>False</CreateBracketsAtStartOfLines> 28 <ParameterBracketOnNewline>True</ParameterBracketOnNewline> 29 <CloseParameterBracketsOnNewLine>True</CloseParameterBracketsOnNewLine> 30 <CompactShortStatements>False</CompactShortStatements> 31 <SinglelineSpacesAfterCommas>True</SinglelineSpacesAfterCommas> 32 <SinglelineSpacesBeforeCommas>False</SinglelineSpacesBeforeCommas> 33 <SpacesAroundOperators>True</SpacesAroundOperators> 34 <SpacesAroundComparisons>True</SpacesAroundComparisons> 35 <FirstParameterDefinitionOnNewLine>True</FirstParameterDefinitionOnNewLine> 36 <SpacesAfterBrackets>True</SpacesAfterBrackets> 37 <LayoutSelectStatements>True</LayoutSelectStatements> 38 <LayoutCreateStatements>True</LayoutCreateStatements> 39 <QueryNewlineAfterOpenBracket>False</QueryNewlineAfterOpenBracket> 40 <QueryNewlineBeforeCloseBracket>True</QueryNewlineBeforeCloseBracket> 41 <JoinConditionsOnNewline>False</JoinConditionsOnNewline> 42 <AlignConditionsWithJoins>False</AlignConditionsWithJoins> 43 <AlignJoinsWithFrom>False</AlignJoinsWithFrom> 44 <IndentByKeywordWidth>False</IndentByKeywordWidth> 45 <ColumnsOnSingleLine>False</ColumnsOnSingleLine> 46 <DoNotIndentProcedureContents>False</DoNotIndentProcedureContents> 47 <ExecuteParametersOnSingleLine>True</ExecuteParametersOnSingleLine> 48 <UseSpacesInsteadOfTabs>False</UseSpacesInsteadOfTabs> 49 <IndentSelectSubclauses>False</IndentSelectSubclauses> 50 </LayoutOptions>
Formate->Case 大小寫
Formate->Schema statements 結構語句
Formate->Data statements 資料語句
Formate->Expressions 表示式
Formate->Commas&parentheses 逗號和雙引號
Formate->Tabs&wrapping 自動換行和tabs鍵縮排量
經過以上設定,我用formate sql功能格式化了一下今天同事給我的一個sql指令碼,還算比較舒服的格式化了之後
1 /* 2 @StartDate 3 @EndDate 4 */ 5 ALTER PROCEDURE [dbo].[CT_FuelingData_ICCardGatherReport] 6 ( 7 @StartDate VARCHAR(50) , 8 @EndDate VARCHAR(50) 9 ) 10 AS 11 BEGIN 12 DECLARE @i INT 13 DECLARE @totalcount INT 14 DECLARE @tmpOilTypeName VARCHAR(50) 15 DECLARE @tmpInAmount DECIMAL 16 DECLARE @tmpOutAmount DECIMAL 17 TRUNCATE TABLE Rep_ICFueling 18 CREATE TABLE #TmpOilTypeName 19 ( 20 IndexId INT IDENTITY(1, 1) 21 NOT NULL , 22 VC_OT_OilTypeName VARCHAR(50) 23 ) 24 INSERT INTO #TmpOilTypeName ( VC_OT_OilTypeName ) 25 SELECT VC_OT_OilTypeName 26 FROM DP_OilType 27 ORDER BY VC_OT_OilTypeName ASC 28 SET @totalcount = @@rowcount 29 SET @i = 1 30 WHILE ( @i <= @totalcount ) 31 BEGIN 32 SET @tmpInAmount = NULL 33 SET @tmpOutAmount = NULL 34 SELECT @tmpOilTypeName = VC_OT_OilTypeName 35 FROM #TmpOilTypeName 36 WHERE IndexId = @i 37 SELECT @tmpInAmount = SUM(ISNULL(a.DE_FD_Amount, 0)) 38 FROM CT_FuelingData a , 39 CT_OuterCard b 40 WHERE ( a.I_FD_TypeCode <> 1 ) AND ( a.I_FD_TypeCode <> 5 ) AND ( b.VC_OC_Company = '' ) AND ( D_FD_DateTime BETWEEN @StartDate AND @EndDate ) AND a.VC_FD_Cardno = b.VC_OC_Cardno AND a.VC_FD_OilType = @tmpOilTypeName 41 GROUP BY a.VC_FD_OilType 42 SELECT @tmpOutAmount = SUM(ISNULL(a.DE_FD_Amount, 0)) 43 FROM CT_FuelingData a , 44 CT_OuterCard b 45 WHERE ( a.I_FD_TypeCode <> 1 ) AND ( a.I_FD_TypeCode <> 5 ) AND ( b.VC_OC_Company <> '' ) AND ( D_FD_DateTime BETWEEN @StartDate AND @EndDate ) AND a.VC_FD_Cardno = b.VC_OC_Cardno AND a.VC_FD_OilType = @tmpOilTypeName 46 GROUP BY a.VC_FD_OilType 47 INSERT INTO Rep_ICFueling ( OilTypeStr, InAmount, OutAmount ) 48 VALUES ( @tmpOilTypeName, ISNULL(@tmpInAmount, 0), 49 ISNULL(@tmpOutAmount, 0) ) 50 SET @i = @i + 1 51 END 52 53 SELECT * 54 FROM Rep_ICFueling 55 --select * from #TmpOilTypeName 56 DROP TABLE #TmpOilTypeName 57 END
----------------------------------------------------華麗的分割線--------------------------------------------------------------
至此,sql prompt的格式設定完了,大家可以格式化一下你們的程式碼試一下符合自己的要求不
最後說一下實驗室裡的一個自動重新整理功能,這個自動重新整理功能對於多人修改同一個資料庫指令碼,例如同一個儲存過程,函式
是很有用的。應該大家都有用版本管理軟體吧,例如:Visual SourceSafe 就可以管理sqlserver資料庫裡的一個庫裡的所有sql指令碼
不多說了,看一下這個重新整理功能,先啟用這個功能啦第一步
然後在SSMS裡新建兩個查詢視窗,第一個查詢視窗在tempdb資料庫裡新建一個表,然後在第二個查詢視窗就可以馬上看到新建的表
寫完了,要睡了,祝大家好夢!!
--------------------------------------------------------------------------------------------------------------
2013-8-27 補充:
發覺格式化TSQL程式碼的時候還可以指出TSQL程式碼的語法錯誤,個人覺得比SSMS的分析程式碼語法好用多了
當你點選“Format SQL”按鈕的時候,如果您的TSQL程式碼有語法錯誤,就會以下劃的紅色波浪線標出來,非常方便
SQL PROMPT也根據SQLSERVER版本來開發的