Formatando T-SQL no SSMS 2012

39

De acordo com este documento da Microsoft:

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

Eu devo usar ctrl + K e ctrl + D para formatar meus documentos SQL no SQL Server Management Studio 2012, mas quando eu uso esse combo, recebo o erro:

A combinação de teclas (Ctrl + K, Ctrl + D) está vinculada ao comando (Formatar documento), que não está disponível no momento.

Estou tentando fazer modificações em um documento SQL existente que não possui nenhuma formatação, o que dificulta a leitura. Alguém sabe como disponibilizar o comando Formatar documento para que eu possa ter o formato SQL deste código para mim?

Aaron Bertrand
fonte
Eu acho que a declaração Available only in the text editoré a maneira do escritor de tecnologia de dizer "não o editor consulta" sem explicitamente chamando o negativo
billinkc
1
@ Billinkc Eu não acho isso certo. O editor de texto é o "editor de consulta" usado para Transact-SQL e XML , mas não é realmente um editor de consulta quando se trata de XML. Acho que a documentação é um pouco promissora e comentei como tal no item Connect .
Aaron Bertrand

Respostas:

42

A combinação de teclado que você procura ( Ctrl+ K, Ctrl+ D) é para "formatação" - mas não na extensão que você espera. Não é um prettificador, é apenas usado para inserir espaçamento e guias corretos, conforme encontrado em Tools > Options > Text Editor > Transact-SQL > General/Tabs- portanto, se você destacar uma parte do texto e pressionar a combinação do teclado, deve converter as guias em 4 espaços (se você selecionou inserir espaços), aplique o tipo de recuo especificado, etc.

Essa opção NÃO visa tornar o código mais legível - essa não é a funcionalidade que o Management Studio oferece atualmente de forma nativa. Embora existam várias opções de terceiros - algumas são externas ao Management Studio, como:

E também existem suplementos para vários níveis de assistência de formatação no editor:

Agora, o motivo pelo qual você está recebendo a mensagem ...

A combinação de teclas (Ctrl + K, Ctrl + D) está vinculada ao comando (Formatar documento), que não está disponível no momento.

... é porque o SSMS mapeou essa combinação de teclas para um contexto diferente. A maneira como você deve ser capaz de "consertar" isso - mais uma vez, seria ainda não fazer o que você quer que ele faça, mesmo que a "correção" funcionou - é fazendo o seguinte:

  1. Vamos para Tools > Options > Environment > Keyboard
  2. Coloque o cursor na Press shortcut keys:caixa
  3. Pressione Ctrl+ K, Ctrl+D
  4. Altere o Shortcut currently used by:menu suspenso de DataWarehouse DesignerparaText Editor

    insira a descrição da imagem aqui

  5. pressione OK

Agora, isso deve mapear a combinação de teclado para o editor de texto, mas o Management Studio a reverte após pressionar OK (você continuará recebendo a mensagem de erro. Portanto, acho que o problema é que a documentação acredita que essa funcionalidade existe, mas o Management O Studio conhece-o melhor e simplesmente não o oferece (e a Microsoft provavelmente escreverá isso como um erro na documentação e o corrigirá, em vez de uma falha na ferramenta). Pode haver esperança no futuro, mas, por enquanto, esse é um problema conhecido e amplamente ignorado.Você notará que a Formattingguia a que a documentação se refere simplesmente não está presente (embora exista para XML, onde a combinação de teclados funciona) .A documentação provavelmente deve indicar:

Aplica a formatação de recuo e espaço para o idioma especificado no painel Formatação do idioma na seção Editor de Texto da caixa de diálogo Opções . Disponível apenas no editor de texto e apenas em determinados idiomas .

Outra maneira de ter uma idéia de que tipo de opções de formatação o SSMS oferece nativamente é acessar Tools > Customize > Commands > Edit > Add Command... > Formata lista de comandos possíveis. Nada que indique que existe algum conhecimento do idioma real; portanto, ele não saberia onde inserir quebras de linha ou adicionar recuos adicionais ou ajudar com parênteses etc.

insira a descrição da imagem aqui

Se você deseja que a formatação específica do idioma torne o código T-SQL existente mais legível, você não obterá muito do SSMS e precisará procurar outras opções.

Aaron Bertrand
fonte
1
Eu experimentei os mesmos sintomas e comportamento que foram descritos pelo OP e por Aaron no SSMS 2016; no entanto, consegui fazê-lo funcionar corretamente. A chave foi remover todos os comandos vinculados ao Ctrl+K, Ctrl+Dprimeiro usando o Removebotão e, em seguida, siga o programa de quatro etapas do Aaron para vincular o teclado, conforme definido acima ( Tools > Options > Environment > Keyboard). Aqui está uma captura de tela da Optionsaparência da minha caixa de diálogo, depois que tudo estiver configurado: pasteboard.co/GDYkh3h.jpg .
Dot Dot Net em
Não sei ao certo por que esse comentário não está listado como resposta, pois ele funciona para mim, fazendo o que você disse.
21120 Kristopher
12

Não acredito que isso seja possível no SSMS. Um item do Connect foi aberto para esse recurso.

Pessoalmente, o que eu gosto de usar para o código SQL mal formatado é o aplicativo da Web em SQL ruim . Realiza um ótimo trabalho de formatação do código SQL para suas especificações. Até gera HTML, se você desejar. Eu não uso o plug-in SSMS ou quaisquer outros produtos que eles anunciam; sempre pulo no site para fazer a formatação rápida e depois copio / colo diretamente no SSMS.

Thomas Stringer
fonte
Obrigado pela dica sobre SQL pobre. Vou manter aquele escondido no meu bolso de trás, com certeza!
Kris Gruttemeyer
3
Outra boa (também útil para formatar código de blogs) é o SQL Prettifier do Simple-Talk .
Aaron Bertrand
Então, mesmo que o documento da Microsoft diga que ele pode formatar, o SSMS não pode?
SQL ruim também possui um plug-in para o Notepad ++. Não sei por que você não usaria o plug-in SSMS. Funciona muito bem agora que eles finalmente o fizeram funcionar com o SSMS 2012+.
Jonathan Fite
2

SqlSmash é uma ferramenta comercial que permite formatar seu SQL (e muito mais) no SSMS 2012 e 2014. O atalho de teclado padrão é (Ctrl + K, Ctrl + D).
Disclaimer: Eu sou o desenvolvedor por trás disso.

Latim
fonte
Por favor, adicione que a ferramenta não é gratuita.
precisa saber é o seguinte
Existe uma versão gratuita da comunidade.
21418 Jason Geiger