Formatowanie T-SQL w SSMS 2012

39

Zgodnie z tym dokumentem Microsoft:

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

Powinienem być w stanie użyć klawiszy Ctrl + K, a następnie Ctrl + D, aby sformatować moje dokumenty SQL w SQL Server Management Studio 2012, ale kiedy używam tej kombinacji, pojawia się błąd:

Kombinacja klawiszy (Ctrl + K, Ctrl + D) jest powiązana z poleceniem (Formatuj dokument), które nie jest obecnie dostępne.

Próbuję wprowadzić modyfikacje do istniejącego dokumentu SQL, który w ogóle nie ma formatowania, co sprawia, że ​​jego odczytanie jest niezwykle trudne. Czy ktoś wie, jak udostępnić polecenie Formatuj dokument, abym mógł sformatować ten kod SQL dla siebie?

Aaron Bertrand
źródło
Myślę, że wypowiedź Available only in the text editorjest sposobem pisarza technicznego na powiedzenie „nie edytor zapytań” bez wyraźnego wzywania negatywu
billinkc
1
@binkinkc Nie sądzę, że to całkiem słuszne. Edytor tekstowy to „edytor zapytań” używany zarówno w Transact-SQL, jak i XML , po prostu nie jest tak naprawdę edytorem zapytań, gdy ma do czynienia z XML. Myślę, że dokumentacja jest nieco zbyt obiecująca i jako taka skomentowałam element Connect .
Aaron Bertrand

Odpowiedzi:

42

Kombinacja klawiatury, której szukasz ( Ctrl+ K, Ctrl+ D), służy do „formatowania” - ale nie w takim zakresie, w jakim się wydaje. To nie jest prettifier, służy tylko do wstawiania prawidłowych odstępów i tabulatorów, tak jak w Tools > Options > Text Editor > Transact-SQL > General/Tabs- więc jeśli podświetlisz fragment tekstu i naciśniesz kombinację klawiatury, to powinien przekonwertować tabulatory na 4 spacje (jeśli wybrałeś wstawianie spacje), zastosuj określony typ wcięcia itp.

Ta opcja NIE ma na celu uczynienia kodu bardziej czytelnym - nie jest to funkcjonalność, którą Management Studio obecnie oferuje natywnie. Chociaż istnieje kilka opcji innych firm - niektóre są zewnętrzne względem Management Studio, takie jak:

Istnieją również dodatki do różnych poziomów pomocy formatowania w edytorze:

Powód, dla którego otrzymujesz wiadomość ...

Kombinacja klawiszy (Ctrl + K, Ctrl + D) jest powiązana z poleceniem (Formatuj dokument), które nie jest obecnie dostępne.

... ponieważ SSMS odwzorował tę kombinację klawiszy na inny kontekst. Sposób, w jaki powinieneś być w stanie to „naprawić” - znowu, to nie zrobiłoby tego, co chcesz, nawet gdyby „poprawka” działała - wykonując następujące czynności:

  1. Iść do Tools > Options > Environment > Keyboard
  2. Umieść kursor w Press shortcut keys:polu
  3. Hit Ctrl+ K, Ctrl+D
  4. Zmień listę Shortcut currently used by:rozwijaną z DataWarehouse DesignernaText Editor

    wprowadź opis zdjęcia tutaj

  5. wciśnij OK

Teraz ma to odwzorować kombinację klawiatury na edytor tekstowy, ale Management Studio odwraca ją po naciśnięciu OK (nadal pojawi się komunikat o błędzie. Myślę, że problem polega na tym, że dokumentacja uważa, że ​​ta funkcjonalność istnieje, ale zarządzanie Studio wie lepiej i po prostu go nie oferuje (a Microsoft prawdopodobnie skasuje to jako błąd w dokumentacji i poprawi, a nie niedociągnięcie w narzędziu). Może być nadzieja w przyszłości, ale na razie jest to znany i w dużej mierze ignorowany problem . Zauważysz, że Formattingkarta, do której odnosi się dokumentacja, po prostu nie jest obecna (chociaż jest tam dla XML, gdzie kombinacja klawiatury działa). Dokumentacja powinna prawdopodobnie zawierać:

Stosuje wcięcia i formatowanie spacji dla języka określonego w panelu Formatowanie języka w sekcji Edytora tekstu w oknie dialogowym Opcje . Dostępne tylko w edytorze tekstu i tylko w niektórych językach .

Innym sposobem, aby dowiedzieć się, jaki rodzaj opcji formatowania oferuje SSMS natywnie, jest Tools > Customize > Commands > Edit > Add Command... > Formatprzejrzenie listy możliwych poleceń. Nic nie wskazuje na to, że istnieje jakakolwiek znajomość rzeczywistego języka, więc nie wiedziałby, gdzie wstawić łamanie linii, dodać dodatkowe wcięcia lub pomóc w nawiasach itp.

wprowadź opis zdjęcia tutaj

Jeśli chcesz, aby formatowanie specyficzne dla języka uczyniło istniejący kod T-SQL bardziej czytelnym, nie dostaniesz wiele z SSMS i będziesz musiał szukać innych opcji.

Aaron Bertrand
źródło
1
Doświadczyłem tych samych objawów i zachowania, które zostały opisane przez OP, jak również Aarona w SSMS 2016; udało mi się jednak sprawić, by działał poprawnie. Kluczem było usunięcie wszystkich poleceń przypisanych Ctrl+K, Ctrl+Dnajpierw za pomocą Removeprzycisku, a następnie zgodnie z czterostopniowym programem Aarona do wiązania klawiatury, jak zdefiniowano powyżej ( Tools > Options > Environment > Keyboard). Oto zrzut ekranu tego Options, jak wygląda moje okno dialogowe po skonfigurowaniu: pasteboard.co/GDYkh3h.jpg .
Mass Dot Net
Wcale nie jestem pewien, dlaczego ten komentarz nie jest wymieniony jako odpowiedź, ponieważ przekłuwanie działa na mnie, robiąc to, co powiedziałeś.
Kristopher
12

Nie wierzę, że jest to możliwe w SSMS. Było poz Połącz otwarty dla tej funkcji.

To, co osobiście lubię używać do źle sformatowanego kodu SQL, to aplikacja internetowa na słabym SQL . Bardzo dobrze formatuje kod SQL zgodnie ze specyfikacjami. Nawet generuje HTML, jeśli chcesz. Nie używam wtyczki SSMS ani żadnych innych reklamowanych przez siebie produktów, zawsze po prostu wskakuję na stronę, aby wykonać szybkie formatowanie, a następnie kopiować / wklejać bezpośrednio do SSMS.

Thomas Stringer
źródło
Dzięki za wskazówkę dotyczącą słabego SQL. Na pewno będę go schował w tylnej kieszeni!
Kris Gruttemeyer,
3
Kolejnym dobrym (przydatnym również do formatowania kodu do blogów) jest SQL Prettifier Simple-Talk .
Aaron Bertrand
Więc nawet jeśli dokument Microsoftu mówi, że może formatować, SSMS nie może?
Słaba SQL ma również wtyczkę do Notepad ++. Nie wiem jednak, dlaczego nie chcesz używać wtyczki SSMS. Działa świetnie teraz, gdy w końcu sprawili, że działa z SSMS 2012+.
Jonathan Fite
2

SqlSmash to komercyjne narzędzie, które pozwala sformatować SQL (i wiele więcej) w SSMS 2012 i 2014. Domyślny skrót klawiaturowy to (Ctrl + K, Ctrl + D).
Oświadczenie: Jestem programistą.

Późnawo
źródło
Dodaj, że narzędzie nie jest darmowe.
ypercubeᵀᴹ
Istnieje darmowa wersja dla społeczności.
Jason Geiger