在SSMS 2012中格式化T-SQL


39

根据此Microsoft文档:

http://msdn.microsoft.com/en-us/library/ms174205.aspx

我应该能够使用ctrl + K,然后再使用ctrl + D在SQL Server Management Studio 2012中格式化我的SQL文档,但是当我使用该组合时,出现错误:

组合键(Ctrl + K,Ctrl + D)绑定到当前不可用的命令(格式化文档)。

我正在尝试对根本没有格式的现有SQL文档进行修改,这使得阅读起来极为困难。有谁知道如何使“格式文档”命令可用,以便我可以用SQL格式化此代码?


我认为该声明Available only in the text editor是技术作者说“不是查询编辑器”而不明确指出否定性的方式
billinkc

1
@billinkc我认为那是不对的。文本编辑器是用于Transact-SQL和XML的“查询编辑器”,在处理XML时,它并不是真正的查询编辑器。我认为文档有点过分乐观,因此我对Connect项目进行了评论
亚伦·伯特兰

Answers:


42

您要使用的键盘组合(Ctrl+ KCtrl+ D)用于“格式化”-但程度并非您所期望的那样。它不是修饰词,仅用于插入正确的空格和制表符,如Tools > Options > Text Editor > Transact-SQL > General/Tabs-中所示,因此,如果突出显示部分文本并按下键盘组合键,则应该将制表符转换为4个空格(如果已选择插入,空格),应用您指定的缩进类型等。

此选项并非旨在使代码更具可读性-这不是Management Studio当前提供的功能。尽管有多个第三方选项-有些在Management Studio外部,例如:

此外,编辑器中还提供用于各种级别格式化帮助的加载项:

现在,您收到消息的原因...

组合键(Ctrl + K,Ctrl + D)绑定到当前不可用的命令(格式化文档)。

...是因为SSMS已将该键组合映射到其他上下文。您应该能够“修复”此问题的方法-再次,即使“修复”成功了,它仍然不会做您想要做的事情-通过执行以下操作:

  1. Tools > Options > Environment > Keyboard
  2. 将光标置于Press shortcut keys:框中
  3. Ctrl+ KCtrl+D
  4. Shortcut currently used by:下拉菜单从更改DataWarehouse DesignerText Editor

    在此处输入图片说明

  5. 按确定

现在,这应该将键盘组合映射到文本编辑器,但是Management Studio在单击OK后将其还原(您将继续收到错误消息。因此,我认为问题在于文档认为此功能存在,但是Management Studio知道得更好,并且根本不提供它(Microsoft可能会将其记录为文档中的错误,并进行纠正,而不是工具方面的缺陷)。将来可能会有希望,但就目前而言,这是一个已知的问题,在很大程度上被忽略了,您会注意到,文档所涉及Formatting选项卡根本就不存在(尽管对于XML来说是存在的,键盘组合确实起作用了),该文档可能应说明:

对在“ 选项”对话框的“ 文本编辑器”部分中的语言的“ 格式”窗格中指定的语言应用缩进和空格格式。仅在文本编辑器中可用,并且仅在某些语言中可用。

了解SSMS本机提供哪种类型的格式设置选项的另一种方法是转到那里Tools > Customize > Commands > Edit > Add Command... > Format查看可能的命令列表。没有什么表示对实际语言有任何了解,因此它不知道在何处插入换行符或添加其他缩进或辅助括号等。

在此处输入图片说明

如果希望特定于语言的格式使现有的T-SQL代码更具可读性,那么SSMS并不会带来太多好处,您需要寻求其他选择。


1
我经历了OP和Aaron在SSMS 2016中描述的相同症状和行为;但是,我能够使其正常工作。关键是先删除所有绑定到Ctrl+K, Ctrl+DRemove按钮的命令,然后再使用Aaron的四步程序绑定键盘,如上所定义(Tools > Options > Environment > Keyboard)。Options设置所有内容后,以下是我的对话框的屏幕快照:pasteboard.co/GDYkh3h.jpg
Mass Dot Net

我完全不确定为什么此评论未列为答案,因为它会按照您说的那样对我起作用。
克里斯托弗

12

我认为这在SSMS中是不可能的。为此功能打开了一个连接项

我个人喜欢用于格式差的SQL代码的是Poor SQL上的Web应用程序。将SQL代码格式化为您的规范确实做得很好。如果您愿意,甚至生成HTML。我不使用SSMS插件或他们宣传的任何其他可交付成果,我总是只是跳到网站上进行快速格式化,然后直接复制/粘贴到SSMS中。


感谢您提供有关SQL较差的提示。一定要把那个塞进我的后兜里!
Kris Gruttemeyer 2013年

3
另一个不错的工具(对于格式化博客代码也很有用)是Simple-Talk的SQL Prettifier
阿龙贝特朗

因此,即使Microsoft的文档说它可以格式化,SSMS也不可以吗?

较差的SQL还具有Notepad ++的插件。不知道为什么不使用SSMS插件。现在,它们终于可以与SSMS 2012+一起使用了,它的工作原理很棒。
乔纳森·菲特


2

SqlSmash是一种商业工具,可让您在SSMS 2012和2014中格式化SQL(以及更多)。默认的键盘快捷键是(Ctrl + K,Ctrl + D)。
免责声明:我是其背后的开发人员。


请补充说明该工具不是免费的。
ypercubeᵀᴹ

有一个免费的社区版本。
杰森·盖格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.