42

我曾经在一个常见的做法是使用结对编程的地方工作。我记得当我们一起编写代码时,我们可以互相学习多少小东西。随着时间的推移,使用新的快捷方式、代码片段等显着提高了我们编写代码的效率。

自从我开始使用 SQL Server 以来,我一直独自一人。我通常会从与我现在无法做到的其他人一起工作中挑选出最好的习惯。

所以这是一个问题:

  • 对于使用 SQL Server Management Studio 高效编写 TSQL 代码,您有哪些提示?
  • 请将提示保留在您认为可以提高编码速度的 2 到 3 件事情/捷径上
  • 请保持在 TSQL 和 SQL Server Management Studio 2005/2008 的范围内 如果该功能特定于 Management Studio 的版本,请说明:例如“仅适用于 SQL Server 2008”

编辑:

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

我正在寻找的答案类型是:

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

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

4

30 回答 30

27

看看Red Gate 的 SQL Prompt - 这是一个很棒的产品(Red Gate 的大部分贡献也是如此)

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

除此之外,我从痛苦的经历中学到,在任何 DELETE 声明之前加上 BEGIN TRANSACTION. 一旦您确定您的语句只删除了它应该删除的内容,您就可以COMMIT.

在很多场合救了我;-)

于 2008-09-19T10:58:24.470 回答
24

社区拥有的 wiki 答案 - 随时编辑或添加评论:

键盘快捷键

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

编辑快捷方式

  • CTRL+ K+CCTRL+ K+ U- 注释/取消注释选定的代码块(由 Unsliced 建议)
  • CTRL+ SHIFT+UCTRL+ SHIFT+ L- 将所选文本更改为大写/小写
  • SHIFT+ ALT+ 选择文本 - 选择/剪切/复制/粘贴矩形文本块

插件

其他提示

  • 使用逗号前缀样式(Cade Roux 建议)
  • 使用键盘加速器(kcrumley 建议)

有用的链接

于 2008-09-19T15:15:38.677 回答
19

+1 用于 SQL 提示。

我想我从未见过的真正简单的东西 - 几乎可以在任何 SQL 环境(甚至其他语言)中使用:

经过 12 年的 SQL 编码,我最近在一些 SSMS 生成的代码中看到了逗号前缀样式,我发现它非常有效。我很惊讶我以前从未见过这种风格,特别是因为它极大地提高了我的工作效率。

SELECT
t.a
,t.b
,t.c
,t.d
FROM t

它使编辑选择列表、参数列表、按列表排序、按列表分组等变得非常容易。我发现在剪切后在列表末尾添加和删除逗号上花费的时间要少得多-和粘贴操作 - 我想它更容易,因为你几乎总是在最后添加东西,并且使用后缀逗号,这需要你更多地移动光标。

试试看,你会感到惊讶——我知道我是。

于 2008-09-19T22:08:27.470 回答
13

我最喜欢的快速提示是,当您在对象资源管理器中展开表名时,只需将单词 colums 拖到查询屏幕即可将表中所有列的列表放入查询中。删除你不想要的比键入你想要的要容易得多,而且它非常简单,它可以防止人们使用真正糟糕的 select * 语法。它可以防止拼写错误。当然,您也可以单独拖动列。

于 2008-09-19T14:16:28.837 回答
13

突出显示查询中的实体并按ALT+F1将为它运行 sp_help,为您提供任何列、索引、参数等的细分。

于 2008-09-23T07:57:23.800 回答
8

尽量使用最小的数据类型,并索引查询中最常用的所有字段。

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

始终使用查询分析器中的图形执行计划或 SHOWPLAN_TEXT 或 SHOWPLAN_ALL 命令来分析您的查询。确保您的查询执行“索引搜索”而不是“索引扫描”或“表扫描”。表扫描或索引扫描是一件非常糟糕的事情,应尽可能避免。在正确的列上选择正确的索引。使用更易读的 ANSI 标准连接子句代替旧式连接。对于 ANSI 连接,WHERE 子句仅用于过滤数据。与旧式连接一样,WHERE 子句同时处理连接条件和过滤数据。

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

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

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

如果可能,请尝试使用集成身份验证。这意味着,忘记 sa 和其他 SQL 用户,使用 microsoft 用户配置基础结构,并始终保持您的 SQL 服务器与所有必需的补丁保持最新。微软在开发、测试和发布补丁方面做得很好,但应用它是你的工作。

在 amazon.com 上搜索有好评的书籍并购买!

于 2008-09-19T11:47:52.717 回答
6

CTRL+I用于增量搜索。点击F3CTRL+I 循环显示结果。

于 2010-03-24T02:29:18.240 回答
5

键盘加速器。一旦你弄清楚你写了很多什么样的查询,编写实用程序存储过程来自动执行任务,并将它们映射到键盘快捷键。例如,本文讨论了如何避免在您每次只想快速查看该表中的示例数据时输入“select top 10 * from SomeBigTable”。我有这个过程的一个大大扩展的版本,映射到CTRL+ 5
我还有几个:

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

……还有一些现在还没有想到的。其中一些事情可以通过 SSMS 中的现有界面完成,但是 SSMS 的窗口和小部件的加载速度可能会有点慢,尤其是当您通过 Internet 查询服务器时,我宁愿不必举手反正键盘。

于 2008-09-22T07:03:33.173 回答
5

只是一个很小的-矩形选择ALT+DRAG非常方便复制+粘贴垂直对齐的列列表(例如,当手动编写大量更新时)。编写 TSQL 是我唯一一次使用它!

于 2009-04-24T11:00:55.730 回答
5

如果您从对象资源管理器的列节点拖动表,它会在查询窗口中为您放置一个列的 CSV 列表

于 2012-01-25T18:11:24.673 回答
4

有助于提高我所做工作准确性的另一件事并不是真正的管理工作室技巧,而是使用 t-sql 本身的技巧。

每当我第一次编写更新或删除语句时,我都会在其中加入一个选择,这样我就可以看到哪些记录会受到影响。

例子:

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 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

正如您从上面的示例中看到的那样,如果您取消注释选择并忘记重新注释它,哎呀,您刚刚更新了整个表,然后在您认为只运行更新时运行了一个选择。本周有人在我的办公室里这样做了,所以所有客户中只有一个人可以登录客户网站。所以避免这样做。

于 2008-09-19T14:33:49.667 回答
4

对于子查询

对象资源管理器 > 右键单击​​表 > 将表编写为 > 选择到 > 剪贴板

然后,您可以将其粘贴到您想要的部分作为子查询。

模板/片段

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

片段可以只是一组带有注释的标题,也可以只是一些简单的代码。

隐式事务

如果您不记得在删除语句之前启动事务,您可以转到选项并在所有查询中默认设置隐式事务。他们总是需要一个明确的提交/回滚。

隔离级别

转到选项并将隔离级别默认设置为 READ_UNCOMMITED。这样您就不需要在所有临时查询中键入 NOLOCK。只是不要忘记在编写新视图或存储过程时放置表格提示。

默认数据库

您的登录有一个由 DBA 设置的默认数据库(对我来说,几乎每次都是不想要的)。

如果您因为当前正在进行的项目而希望它是不同的。

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

多次登录

(这些你可能已经做过了)

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

要使用不同的登录名执行您已经编写的相同查询,而不是复制查询,只需右键单击查询窗格 > 连接 > 更改连接。

于 2008-10-03T06:41:28.443 回答
4

使用对象资源管理器中的过滤器按钮从名称中的部分文本中快速查找特定对象(表、存储过程等)或查找属于特定模式的对象。

于 2012-11-29T18:19:36.383 回答
3

我喜欢将CTRL+的键盘快捷键设置F1sp_helptext,因为这允许您突出显示存储过程并快速查看它的代码。ALT我发现它是对默认+ F1 sp_help快捷方式的一个很好的补充。

于 2009-03-12T04:48:00.493 回答
3

我有一个计划任务,每天晚上将每个对象(表、存储过程等)写入文件。我在输出目录上设置了全文搜索索引,所以当我在寻找某个隐藏在数据库中的某个字符串(例如,一个常量)时,我可以很快找到它。

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

于 2009-08-12T20:45:24.483 回答
2

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

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

于 2008-09-19T11:03:04.350 回答
2

使用++显示查询设计CTRLSHIFTQ

于 2009-03-12T04:37:06.243 回答
2

我是最近为 SSMS2008/R2 发布的 SSMSBoost 插件的开发人员,其目的是添加加速日常任务的附加功能:

快捷方式:-( F2在 SQL 编辑器中):位于未绑定光标的脚本对象

CTRL+ F2- (在 SQL 编辑器中):在对象资源管理器中找到位于光标下的对象并将其聚焦 +它包括 SSMS2008 中缺少的快捷方式编辑器(即将在 SSMS2012 中出现)

SSMSBoost 还添加了带有按钮的工具栏:

  • 将 SQL 编辑器连接同步到对象资源管理器(在对象资源管理器中关注当前数据库)
  • 管理您自己的首选连接并通过组合框在它们之间切换(包括服务器之间的跳转)
  • 自动替换:键入“ sel ”将替换它select * from,您还可以添加自己的令牌替换对
  • 和一些更有用的功能

SSMSBoost 工具栏

于 2012-03-09T10:13:06.303 回答
1

利用 TRY/CATCH 功能捕获错误。

Adam Machanic 的 Expert SQL Server 2005 Programming 是可靠技术和实践的重要资源。

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

利用模式来实施数据安全和角色。

于 2008-09-19T12:42:00.107 回答
1

F5运行当前查询很容易获胜,之后,++的通用MS编辑器命令CTRL将所选文本注释掉,然后K++取消注释。 CCTRLKU

于 2008-09-23T07:48:17.097 回答
1

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

于 2009-05-15T17:50:22.907 回答
1

如果您与开发人员一起工作,通常会得到一小段代码被格式化为一长行代码,那么用于 SQL Server management Studio 的 sql pretty printer add-on 可能会对超过 60 多个格式化程序选项有很大帮助。 http://www.dpriver.com/sqlpp/ssmsaddin.html

于 2009-07-31T06:53:44.937 回答
1

在突出显示的文本上使用TAB会缩进它。非常适合以可读的格式轻松安排您的代码。此外,SHIFT+TAB将取消缩进。

于 2009-09-24T00:48:48.297 回答
1

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

于 2011-03-30T17:24:00.567 回答
1

Devart 的 SQL Complete express edition 是一个 SSMS 插件,是一个免费且有用的插件。它提供了急需的代码格式化和智能感知功能。

我也使用SSMSToolsPack插件,它非常好。我爱;

  1. 它是 SQL 片段,您可以在其中为代码片段创建短键,并在您键入这些键并按 Enter 时自动附加它们。
  2. 搜索历史记录以检索您几个月前运行并忘记的查询,节省了我很多时间。
  3. 恢复上次会话。现在,如果我必须重新启动我的 Windows,我永远不会保存我的查询。我只需单击恢复最后一个会话,我的最后一个会话就会自动恢复并自动创建连接。
  4. 从查询结果创建插入语句(非常有用)。只是喜欢这个插件。

最近推出了一个小渔获物。SSMSToolsPack 对于 SSMS 2012 不再免费。它对于 SSMS 2005 和 SSMS 2008 仍然是免费的,直到现在。仅当您想在迁移到 SSMS 2012 时购买它时才使用它。否则,放弃它可能是个好主意。

于 2011-12-08T10:02:33.340 回答
1
  • ALT+SHIFT+ 选择

这是我最近发现的一个很棒的方法——它可以让你选择一个矩形的文本部分,而不管换行符如何。对于快速裁剪子查询或列表非常方便。

于 2012-03-12T19:18:40.843 回答
1

如果您需要为某种 API 编写大量存储过程。你可能喜欢我当程序员时写的这个工具。假设您有一个 200 列的表,需要编写一个存储过程来插入/更新和另一个存储过程来删除。因为您不希望您的应用程序直接访问这些表。仅声明部分将是一项繁琐的任务,但如果部分代码是为您编写的,则不会。这是一个例子......

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

于 2012-05-31T05:49:47.833 回答
0

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

不过,它是有代价的。没有免费版本的东西。

于 2008-09-23T10:22:57.583 回答
0

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

如果您右键单击表格并选择Open它将使用可编辑的网格,您可以在其中修改单元格。如果您右键单击数据库并选择New Query它将创建一个稍微不同类型的窗口,您无法在其中修改网格但它为您提供了一些其他不错的功能,例如允许不同的代码片段并让您通过选择单独执行它们。

于 2009-09-24T00:50:43.820 回答
0

使用SELECT INTO查询快速/轻松地制作备份表以进行工作和试验。

于 2009-09-24T00:55:02.163 回答