SQL Server Management Studio – 改进TSQL编码过程的技巧

我曾经在一个普遍使用Pair Programming的地方工作。 我记得在代码上一起工作时,我们可以相互学习多less个小东西。 随着时间的推移拾取新的快捷方式,代码片段等显着提高了我们编写代码的效率。

自从我开始使用SQL Server以来,我一直都是自己做的。 我通常会select与其他人一起工作的最好的习惯,而现在我不能这样做。

所以这里是一个问题:

  • 关于使用SQL Server Management Studio有效编写TSQL代码的技巧?
  • 请保持提示2 – 3的东西/捷径,你认为提高你的编码速度
  • 请保持在TSQL和SQL Server Management Studio 2005/2008的范围内如果该function特定于Management Studio的版本,请指明:例如“仅适用于SQL Server 2008”

编辑:

恐怕我可能被你们中的一些人误解了。 我不是在寻找编写高效TSQL代码的技巧,而是寻求如何有效地使用Management Studio来加速编码过程本身的build议。

我正在寻找的答案types是:

  • 使用模板,
  • 键盘快捷键,
  • 使用IntelliSense插件等

基本上那些使编码体验更有效和愉快的小事情。

看看Red Gate的SQL Prompt – 这是一个很棒的产品(与Red Gate的大部分贡献一样)

SQL Inform也是一个很好的免费(在线)工具,用于格式化有时可能失控的长程序。

除此之外,我从痛苦的经验中学到了 BEGIN TRANSACTION 使用 DELETE 语句 之前的好处。 一旦你确定你的陈述只是删除它应该,然后你可以COMMIT

多次保存了我;-)

社区拥有的维基答案 – 随时编辑或添加评论:

键盘快捷键

  • F5CTRL + EALT + X – 执行当前选定的TSQL代码
  • CTRL + R – 显示/隐藏结果窗格
  • CTRL + N – 打开新的查询窗口
  • CTRL + L – 显示查询执行计划

编辑快捷键

  • CTRL + K + CCTRL + K + U – 注释/取消注释选定的代码块(由Unslicedbuild议)
  • CTRL + SHIFT + UCTRL + SHIFT + L – 将选定文本更改为UPPER /小写
  • SHIFT + ALT +select文本 – select/剪切/复制/粘贴一个矩形的文本块

插件

  • 红门的SQL提示 – IntelliSense(由Galwegianbuild议)
  • SQLinForm – TSQL的格式(由Galwegianbuild议)
  • 穷人的T-SQL Formatter – 开源格式化插件

其他技巧

  • 使用逗号前缀样式(由Cade Rouxbuild议)
  • 使用键盘快捷键(由kcrumleybuild议)

有用的链接

  • SQL Server Management Studio键盘快捷键(完整列表)

SQL Prompt +1。

一些真正简单的东西,我想我从来没有见过 – 这将适用于任何SQL环境(甚至其他语言):

在经过了12年的SQL编码之后,我最近变成了在SSMS生成的代码中看到它后转换为逗号前缀风格,我发现它非常有效。 我很惊讶,以前从未见过这种风格,尤其是因为它极大地提高了我的生产力。

 SELECT ta ,tb ,tc ,td FROM t 

它使得编辑select列表,参数列表,按列表sorting,按列表分组等非常简单。我发现我花费了大量的时间,在剪切后添加和删除列表末尾的逗号,和粘贴操作 – 我想这样做更容易,因为你几乎总是在最后添加东西,而用后缀逗号,则需要更多的移动光标。

试试吧,你会感到惊讶 – 我知道我是。

我最喜欢的快速提示是,当您在对象资源pipe理器中展开表名时,只要将单词列拖到查询屏幕,就会将表中所有列的列表放入查询中。 删除那些你不想要的东西要比input你想要的更容易,而且非常简单,它可以防止人们使用真正糟糕的select *语法。 它可以防止错别字。 当然你也可以单独拖动列。

在查询中突出显示一个实体并按下ALT + F1将为其运行sp_help,从而为您提供任何列,索引,参数等的细目。

尝试始终使用可以使用的最小数据types,并索引查询中最常用的所有字段。

尽量避免服务器端游标。 始终坚持“基于集合的方法”,而不是“程序方法”来访问和操作数据。 游标通常可以通过使用SELECT语句来避免。

请始终在查询分析器或SHOWPLAN_TEXT或SHOWPLAN_ALL命令中使用graphics执行计划来分析您的查询。 确保您的查询执行“索引search”而不是“索引扫描”或“表扫描”。 表扫描或索引扫描是非常糟糕的事情,应尽可能避免。 在右栏select正确的索引。 使用更可读的ANSI-Standard Join子句而不是旧式联接。 使用ANSI连接时,WHERE子句仅用于过滤数据。 与旧式联接一样,WHERE子句同时处理联接条件和筛选数据。

不要让您的前端应用程序直接使用SELECT或INSERT / UPDATE / DELETE语句查询/操作数据。 相反,创build存储过程,并让您的应用程序访问这些存储过程。 这样可以使数据访问在应用程序的所有模块之间始终保持一致,并同时集中数据库中的业务逻辑。

说到存储过程,不要将存储过程名称作为“sp_”的前缀。 前缀sp_是为SQL Server附带的系统存储过程保留的。 每当SQL Server遇到一个以sp_开头的过程名称时,它首先尝试在master数据库中find该过程,然后查找提供的任何限定符(数据库,所有者),然后尝试dbo作为所有者。 所以你可以通过避免使用“sp_”前缀来节省查找存储过程的时间。

避免dynamicSQL语句尽可能多。 dynamicSQL往往比静态SQL慢,因为SQL Server每次运行时都必须生成一个执行计划。

何时可以尝试使用集成身份validation。 这意味着,忘记sa和其他SQL用户,使用微软用户configuration基础架构,并始终保持您的SQL服务器,与所有必需的修补程序保持最新。 微软在开发,testing和发布补丁方面做得很好,但是这是你的工作。

在亚马逊网站search有好评的书,并购买它!

用于增量search的 CTRL + I。F3CTRL + I循环查看结果。

如果从对象浏览器的“列”节点中为某个表格拖放,则会在查询窗口中为您放置一列CSV列表

键盘加速器。 一旦确定了你写了多less种查询,编写实用程序存储过程来自动执行这些任务,并将它们映射到键盘快捷方式。 例如, 本文将讨论如何避免每次只想快速查看表格中的示例数据时,从“SomeBigTable”中input“select top 10 *”。 我已经得到了这个过程的大大扩展版本,映射到CTRL + 5
我还有几个:

  1. CTRL + 0 :快速编写表格的数据,proc,UDF或视图的定义
  2. CTRL + 9 :find名字中包含给定string的任何对象(因为当你知道你的名字中有一个“Option”的过程,但你不知道它的名字是以什么开头的)
  3. CTRL + 7 :find代码中包含给定string的任何proc,UDF或视图
  4. CTRL + 4 :find所有具有给定名称的列的表

…还有一些现在不想到的东西。 其中一些可以通过SSMS中的现有接口来完成,但是SSMS的窗口和小部件可能会有点慢加载,特别是当你在互联网上查询服务器时,我不希望把我的手拿起来键盘无论如何。

只是一个小小的select – 矩形selectALT + DRAG进来复制粘贴垂直alignment的列列表(例如,当手动编写一个大规模的更新)真的很方便。 编写TSQL是我使用它的唯一时间!

对于子查询

对象浏览器>右键单击一个表格>脚本表格>select到>剪贴板

然后,你可以粘贴在你想要的部分作为子查询。

模板/片段

只用一段代码创build你自己的模板。 然后,将模板作为新文档打开,只需将其拖到当前查询中即可插入片段。

一个片段可以简单地成为一个带有注释的标题或者一些简单的代码。

隐式事务

如果你不记得在你的删除状态之前开始一个事务,你可以在所有的查询中默认select并设置隐式事务。 他们总是需要一个明确的提交/回滚。

隔离级别

转到选项,默认情况下将隔离级别设置为READ_UNCOMMITED。 这样你就不需要在所有的特别查询中input一个NOLOCK。 当写一个新的视图或存储过程时,不要忘记放置表提示。

默认数据库

您的login有一个由DBA设置的默认数据库(对于我来说,几乎每次都是不受欢迎的数据库)。

如果你希望它是一个不同的,因为你正在进行的项目。

在“注册的服务器”窗格中>右键单击>属性>连接属性选项卡>连接到数据库。

多个login

(这些你可能已经完成了)

多次注册服务器,每个都使用不同的login名。 然后,您可以在对象浏览器中打开多个相同的服务器(每个都使用不同的login名)。

要执行已经使用不同login名写入的相同查询,而不是复制查询,只需在查询窗格>连接>更改连接上单击鼠标右键即可。

另一件事,有助于提高我所做的准确性不是一个pipe理工作室的提示,而是一个使用t-sql本身。

每当我第一次写更新或删除语句时,我都会join一个select,以便我可以看到哪些logging会受到影响。

例子:

 select t1.field1,t2.field2 --update t --set field1 = t2.field2 from mytable t1 join myothertable t2 on t1.idfield =t2.idfield where t2.field1 >10 select t1.* --delete t1 from mytable t1 join myothertable t2 on t1.idfield =t2.idfield where t2.field1 = 'test' 

(注意我在这里只是为了说明而使用了select *,通常我只需要select几个字段来查看查询是否正确,有时我可能需要查看join中其他表的字段以及我计划的logging删除以确保连接以我认为的方式工作)

运行此代码时,首先运行select以确保它是正确的,然后注释select行并取消注释删除或更新部分。 通过这样做,在检查之前,您不会意外地运行删除或更新。 此外,您还可以避免忘记注销select,导致更新更新数据库表中可能发生的所有logging(如果使用此语法),并取消select运行它的问题:

 select t1.field1,t2.field2 update t set field1 = t2.field2 --select t1.field1,t2.field2 from mytable t1 join myothertable t2 on t1.idfield =t2.idfield where t2.field1 >10 

从上面的例子可以看出,如果取消select注释并忘记重新注释,哎呀,你只是更新整个表,然后运行一个select,当你想运行更新。 这个星期有人在我的办公室这样做了,所以只有一个所有的客户可以login到客户的网站。 所以避免这样做。

使用对象资源pipe理器中的“filter”button,可以从名称中的部分文本快速查找特定对象(表,存储过程等),或查找属于特定模式的对象。

我有一个计划任务,每晚写每个对象(表,sproc等)到一个文件。 我在输出目录中设置了全文search索引,所以当我在寻找一个被埋在数据库中的某个string(例如一个常量)时,我可以很快find它。

在Management Studio中,您可以使用Tasks> Generate Scrips …命令来查看如何执行此操作。

我喜欢将CTRL + F1的快捷键设置为sp_helptext ,因为这样可以突出显示存储过程并快速查看代码。 我发现这是默认的ALT + F1 sp_help快捷键的一个很好的补充。

我build议你为你的SQL脚本创build标准并坚持下去。 还可以使用模板快速创build不同types的存储过程和函数。 这是一个关于SQL Server 2005 Management Studio中的模板的问题

如何在SQL Server 2005 Management Studio中创buildSQL Server 2005存储过程模板?

我是最近为SSMS2008 / R2发布的SSMSBoost加载项的开发者,目的是添加加速日常例行任务的function:

Shorcut: F2 – (在SQL编辑器中):脚本对象位于unted游标

CTRL + F2 – (在SQL编辑器中):在对象资源pipe理器中查找位于光标下方的对象,并将其聚焦+它包括快捷方式编辑器,在SSMS2008中丢失(即将在SSMS2012中)

还SSMSBoost添加button的工具栏:

  • 将SQL编辑器连接同步到对象资源pipe理器(在对象资源pipe理器中关注当前数据库
  • pipe理您自己的首选连接,并通过combobox(包括服务器之间的跳转)
  • 自动replace:input“ sel ”将会用select * from代替它,你也可以添加你自己的令牌replace对
  • 和一些更有用的function

SSMSBoost工具栏

CTRL + SHIFT + Q显示查询devise器

利用TRY / CATCHfunction来捕捉错误。

Adam Machanic的SQL Server 2005专家编程是一个强大的技术和实践资源。

使用所有权链接存储过程。

利用模式来执行数据安全和angular色。

使用对象资源pipe理器详细信息而不是对象资源pipe理器查看您的表,这样您可以按一个字母,并将其转到具有该字母前缀的第一个表。

如果你和开发人员一起工作,经常会得到一小段格式化为一行代码的代码,那么SQL Serverpipe理工作室的sql漂亮打印机插件可能会对超过60多个格式化程序选项有所帮助。 http://www.dpriver.com/sqlpp/ssmsaddin.html

使用书签是保持理智的好方法,如果您正在使用或排除一个非常长的过程。 假设您正在使用外部查询中的派生字段,并且它的内部查询中的定义是另外200行。 您可以为两个位置添加书签,然后快速在两者之间来回切换。

如果你需要为某种API编写大量的sprocs。 当我还是程序员的时候,你可能会喜欢这个工具。 假设你有一个200列表,需要有一个sproc写入插入/更新和另一个删除。 因为你不希望你的应用程序直接访问表。 只是声明部分将是一个乏味的任务,但不是如果代码的一部分是为你写的。 这是一个例子…

 CREATE PROC upsert_Table1(@col1 int, @col2 varchar(200), @col3 float, etc.) AS BEGIN UPDATE table1 SET col1 = @col1, col2 = @col2, col3 = @col3, etc. IF @@error <> 0 INSERT Table1 (col1, col2, col3, etc.) VALUES(@col1, @col2, @col3, etc.) END GO CREATE PROC delete_Table1(@col1) AS DELETE FROM Table1 WHERE col1 = @col1 

http://snipplr.com/view/13451/spcoldefinition-or-writing-upsert-sp-in-a-snap/

注意:你也可以到2002年写的原始代码和文章(我现在觉得老了!)
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=549&lngWId=5

突出显示的文本上使用选项卡将缩进它。 很容易以可读的格式安排您的代码。 另外, SHIFT + TAB将会是unindent。

F5运行当前查询是一个简单的胜利,之后, CTRL + K + C的通用MS编辑器命令将所选文本注释掉,然后CTRL + K + U取消注释。

  • ALT+SHIFT +select

这是我最近发现的一个好东西 – 它可以让你select一个矩形的文本部分,不pipe换行符是什么。 非常方便快速删除子查询或列表。

Devart的SQL Complete Express版本是一个SSMS插件,是一个免费且有用的插件。 它提供了非常需要的代码格式和智能感知function。

我也使用SSMSToolsPack插件,这是非常好的。 我爱;

  1. 这是SQL代码片段,您可以在代码片段中创build简短键,并在键入这些键时自动添加它们,然后按Enter键。
  2. 通过历史search来检索你在几个月前跑了几次而忘了的查询,节省了我很多的时间。
  3. 恢复上个会话。 现在我从来没有保存我的查询,如果我不得不重新启动我的窗户。 我只需点击恢复上次会话,我的最后一个会话得到并恢复,连接自动创build。
  4. 从查询结果创build插入语句(非常有用)。 只是喜欢这个插件。

最近引进了一个小渔获。 SSMSToolsPack已经不再适用于SSMS 2012,SSMS 2005和SSMS 2008仍然是免费的。 只有在你想迁移到SSMS 2012的时候才需要购买它。否则,可能是离开它是个好主意。

我热烈推荐Red Gate的SQL Prompt。 自动发现(表格,存储过程,函数和本地函数的智能感知)简直太棒了! 🙂

它来与一个价格虽然。 没有免费软件版本的东西。

了解SQL Server Management Studio中可用的两种(?)不同types的窗口。

如果右键单击一个表并select“ Open ,将使用可修改的网格,您可以修改其中的单元格。如果右键单击该数据库并select“ New Query ,将创build一个稍微不同的窗口types,网格中,但它给你一些其他很好的function,如允许不同的代码片段,让你分开执行它们的select。

使用SELECT INTO查询可以快速/轻松地使备份表正常工作并进行试验。