Форматирование T-SQL в SSMS 2012

39

Согласно этому документу Microsoft:

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

Я должен иметь возможность использовать ctrl + K, а затем ctrl + D для форматирования моих документов SQL в SQL Server Management Studio 2012, но при использовании этого комбо я получаю сообщение об ошибке:

Комбинация клавиш (Ctrl + K, Ctrl + D) привязана к команде (Формат документа), которая в данный момент недоступна.

Я пытаюсь внести изменения в существующий документ SQL, который вообще не имеет форматирования, что делает его чрезвычайно трудным для чтения. Кто-нибудь знает, как сделать команду «Форматировать документ» доступной, чтобы я мог отформатировать этот код для меня?

Аарон Бертран
источник
Я думаю, что это утверждение Available only in the text editor- это способ автора статьи сказать «не редактор запросов» без явного вызова негатива
billinkc
1
@billinkc Не думаю, что это правильно. Текстовый редактор - это «редактор запросов», используемый как для Transact-SQL, так и для XML , он просто не является редактором запросов, когда он работает с XML. Я думаю, что документация немного чрезмерно многообещающая, и я прокомментировал как таковой элемент Connect .
Аарон Бертран

Ответы:

42

Комбинация клавиш, которую вы ищете ( Ctrl+ K, Ctrl+ 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+ K, Ctrl+D
  4. Изменить Shortcut currently used by:раскрывающийся список с DataWarehouse DesignerнаText Editor

    введите описание изображения здесь

  5. Нажмите ОК

Теперь это должно отобразить комбинацию клавиш в текстовом редакторе, но Management Studio возвращает ее после нажатия OK (вы продолжите получать сообщение об ошибке. Поэтому, я думаю, проблема в том, что документация полагает, что эта функция существует, но Management Студия знает лучше и просто не предлагает ее (и Microsoft, скорее всего, будет списывать это как ошибку в документации и исправлять ее, а не как недостаток в инструменте). Может быть надежда на будущее, но пока Это известная и в значительной степени игнорируемая проблема . Вы заметите, что Formattingвкладка, на которую ссылается документация , просто отсутствует (хотя она существует для XML, где комбинация клавиш работает). В документации, вероятно, должно быть указано:

Применяется для отступов и форматирование пространства для языка , указанного на Форматирование панели языка в текстовом редакторе разделе Параметры диалогового окна. Доступно только в текстовом редакторе и только для определенных языков .

Другой способ получить представление о типах параметров форматирования, которые изначально предлагает SSMS, - перейти Tools > Customize > Commands > Edit > Add Command... > Formatи посмотреть список возможных команд. Ничего из того, что указывает на знание языка, не знает, куда вставлять разрывы строк, добавлять дополнительные отступы, помогать с круглыми скобками и т. Д.

введите описание изображения здесь

Если вы хотите, чтобы форматирование для конкретного языка сделало существующий код T-SQL более читабельным, вы не получите многого от SSMS, и вам придется искать другие варианты.

Аарон Бертран
источник
1
У меня были те же симптомы и поведение, которые были описаны OP, а также Aaron в SSMS 2016; Тем не менее, я смог заставить его работать должным образом. Клавиша удаляла все команды, привязанные Ctrl+K, Ctrl+Dсначала к использованию Removeкнопки, а затем следовали четырехэтапной программе Аарона для привязки клавиатуры, как определено выше ( Tools > Options > Environment > Keyboard). Вот скриншот того, как Optionsвыглядит мое диалоговое окно, когда все настроено: pasteboard.co/GDYkh3h.jpg .
Mass Dot Net
Я не совсем уверен, почему этот комментарий не указан в качестве ответа, потому что он работает на меня, делая то, что вы сказали.
Кристофер
12

Я не верю, что это возможно в SSMS. Для этой функции был открыт элемент подключения.

Что мне лично нравится использовать для плохо отформатированного кода SQL, так это веб-приложение на языке Poor SQL . Это действительно хорошая работа по форматированию кода SQL в соответствии с вашими требованиями. Даже генерирует HTML, если вы этого хотите. Я не использую плагин SSMS или любые другие материалы, которые они рекламируют, я всегда просто прыгаю на сайт, чтобы выполнить быстрое форматирование, а затем скопировать / вставить прямо в SSMS.

Томас Стрингер
источник
Спасибо за совет по плохому SQL. Собираюсь оставить его в заднем кармане!
Крис Груттемейер
3
Еще один хороший вариант (также полезный для форматирования кода для блогов) - это SQL Prettifier от Simple-Talk .
Аарон Бертран
Таким образом, хотя документ Microsoft говорит, что он может форматировать, SSMS не может?
Плохой SQL также имеет плагин для Notepad ++. Не уверен, почему вы не используете плагин SSMS, хотя. Это прекрасно работает теперь, когда они наконец сделали это работать с SSMS 2012+.
Джонатан Файт
6

Установите дополнение, которое делает это. Я использую бесплатную версию SQL Complete: http://www.devart.com/dbforge/sql/sqlcomplete/, которая предлагает некоторые основные функции форматирования SQL. Он интегрируется с SSMS и использует Ctrl + K, D.

Роберт Нестрой
источник
бесплатная онлайн версия sql-format.com
Иман Абиди
2

SqlSmash - это коммерческий инструмент, который позволяет вам форматировать SQL (и многое другое) в SSMS 2012 и 2014. Сочетание клавиш по умолчанию - (Ctrl + K, Ctrl + D).
Отказ от ответственности: я разработчик за это.

запоздавший
источник
Пожалуйста, добавьте, что инструмент не является бесплатным.
ypercubeᵀᴹ
Существует бесплатная версия сообщества.
Джейсон Гейгер