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版本来开发的