SQL PROMPT5.3.4.1的一些設置選項
摘自:http://www.cnblogs.com/furenjian/p/4519426.html
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版本來開發的
SQL PROMPT5.3.4.1的一些設置選項