1. 程式人生 > >SQL PROMPT5.3.4.1的一些設定選項

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版本來開發的