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

SQL PROMPT5.3.4.1的一些設置選項

param 存儲 過程 f11 彈出 stand val fur -s

摘自: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 = Ndbo.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的一些設置選項