Định dạng T-SQL trong SSMS 2012


39

Theo tài liệu này của Microsoft:

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

Tôi phải có khả năng sử dụng ctrl + K rồi ctrl + D để định dạng tài liệu SQL của mình trong SQL Server Management Studio 2012 nhưng khi tôi sử dụng kết hợp đó, tôi gặp lỗi:

Tổ hợp phím (Ctrl + K, Ctrl + D) bị ràng buộc với lệnh (Định dạng tài liệu) hiện không khả dụng.

Tôi đang cố gắng sửa đổi một tài liệu SQL hiện có mà không có định dạng nào cho nó, điều này làm cho nó cực kỳ khó đọc. Có ai biết làm thế nào để tạo lệnh Format Document để tôi có thể định dạng SQL cho mã này không?


Tôi nghĩ rằng tuyên bố Available only in the text editorlà cách nói của nhà văn công nghệ "không phải là trình soạn thảo truy vấn" mà không gọi ra tiêu cực
billinkc

1
@billinkc Tôi không nghĩ điều đó hoàn toàn đúng. Trình soạn thảo văn bản là "trình soạn thảo truy vấn" được sử dụng cho cả Transact-SQL và XML , nó thực sự không phải là trình soạn thảo truy vấn khi nó xử lý XML. Tôi nghĩ rằng tài liệu này hơi quá hứa hẹn và tôi đã nhận xét như vậy về mục Kết nối .
Aaron Bertrand

Câu trả lời:


42

Sự kết hợp bàn phím mà bạn theo sau ( Ctrl+ K, Ctrl+ D) là để "định dạng" - nhưng không đến mức bạn có thể mong đợi. Nó không phải là trình chỉnh sửa, nó chỉ được sử dụng để chèn khoảng cách và các tab chính xác như được tìm thấy trong Tools > Options > Text Editor > Transact-SQL > General/Tabs- vì vậy nếu bạn làm nổi bật một phần văn bản và nhấn tổ hợp bàn phím, bạn nên chuyển đổi các tab thành 4 khoảng trắng (nếu bạn đã chọn chèn dấu cách), áp dụng kiểu thụt lề bạn đã chỉ định, v.v.

Tùy chọn này KHÔNG nhằm mục đích làm cho mã dễ đọc hơn - đây không phải là chức năng mà Management Studio hiện cung cấp. Mặc dù có một số tùy chọn bên thứ 3 - một số tùy chọn bên ngoài của Studio quản lý, như:

Và cũng có các bổ trợ cho các mức hỗ trợ định dạng khác nhau trong trình chỉnh sửa:

Bây giờ, lý do bạn nhận được tin nhắn ...

Tổ hợp phím (Ctrl + K, Ctrl + D) bị ràng buộc với lệnh (Định dạng tài liệu) hiện không khả dụng.

... là bởi vì SSMS đã ánh xạ tổ hợp phím đó vào một bối cảnh khác. Cách bạn nên có thể "sửa chữa" này - một lần nữa, nó vẫn sẽ không làm những gì bạn muốn nó làm, ngay cả khi "sửa chữa" làm việc - là bằng cách làm như sau:

  1. Đi đến Tools > Options > Environment > Keyboard
  2. Đặt con trỏ của bạn vào Press shortcut keys:hộp
  3. Lượt Ctrl+ K, Ctrl+D
  4. Thay đổi trình đơn Shortcut currently used by:thả xuống từ DataWarehouse DesignerthànhText Editor

    nhập mô tả hình ảnh ở đây

  5. nhấn OK

Bây giờ, điều này được cho là ánh xạ tổ hợp bàn phím đến trình soạn thảo văn bản, nhưng Management Studio sẽ hoàn nguyên nó sau khi nhấn OK (bạn sẽ tiếp tục nhận được thông báo lỗi. Vì vậy, tôi nghĩ vấn đề là tài liệu tin rằng chức năng này tồn tại, nhưng Management Studio biết rõ hơn và đơn giản là không cung cấp nó (và Microsoft có thể sẽ viết lỗi này như một lỗi trong tài liệu và sửa nó, thay vì thiếu sót trong công cụ). Có thể có hy vọng trong tương lai, nhưng hiện tại, Đây là một vấn đề đã biết và phần lớn bị bỏ qua . Bạn sẽ lưu ý rằng Formattingtab mà tài liệu đề cập đến đơn giản là không có (mặc dù nó có ở XML, nơi tổ hợp bàn phím hoạt động). Tài liệu có thể nên nêu:

Áp dụng định dạng thụt lề và không gian cho ngôn ngữ được chỉ định trên ngăn Định dạng của ngôn ngữ trong phần Trình soạn thảo văn bản của hộp thoại Tùy chọn . Chỉ có sẵn trong trình soạn thảo văn bản và chỉ cho một số ngôn ngữ nhất định .

Một cách khác để có được ý tưởng về loại tùy chọn định dạng mà SSMS cung cấp nguyên bản là đi đến Tools > Customize > Commands > Edit > Add Command... > Formatvà xem danh sách các lệnh có thể có ở đó. Không có gì chỉ ra rằng có bất kỳ kiến ​​thức nào về ngôn ngữ thực tế, vì vậy nó sẽ không biết nơi để ngắt dòng hoặc thêm thụt lề hoặc hỗ trợ với dấu ngoặc đơn, v.v.

nhập mô tả hình ảnh ở đây

Nếu bạn muốn định dạng dành riêng cho ngôn ngữ để làm cho mã T-SQL hiện tại dễ đọc hơn, bạn sẽ không nhận được nhiều từ SSMS và bạn sẽ cần tìm kiếm các tùy chọn khác.


1
Tôi đã trải qua các triệu chứng và hành vi tương tự được mô tả bởi OP cũng như Aaron trong SSMS 2016; tuy nhiên, tôi đã có thể làm cho nó hoạt động đúng. Khóa này đã loại bỏ tất cả các lệnh bị ràng buộc Ctrl+K, Ctrl+Dtrước tiên bằng Removenút này, sau đó làm theo chương trình bốn bước của Aaron để ràng buộc bàn phím, như được định nghĩa ở trên ( Tools > Options > Environment > Keyboard). Đây là một ảnh chụp màn hình của Optionshộp thoại của tôi trông như thế nào, một khi mọi thứ được thiết lập: pasteboard.co/GDYkh3h.jpg .
Mass Dot Net

Tôi hoàn toàn không biết tại sao bình luận này không được liệt kê dưới dạng câu trả lời vì nó không phù hợp với tôi bằng cách làm những gì bạn nói.
Kristopher

12

Tôi không tin điều này là có thể trong SSMS. Có một mục Connect được mở ra cho tính năng này.

Điều cá nhân tôi muốn sử dụng cho mã SQL được định dạng kém là ứng dụng web trên Poor SQL . Nó thực hiện một công việc thực sự tốt đẹp là định dạng mã SQL theo thông số kỹ thuật của bạn. Thậm chí tạo HTML nếu bạn mong muốn. Tôi không sử dụng trình cắm SSMS hoặc bất kỳ phân phối nào khác mà họ quảng cáo, tôi luôn chỉ truy cập vào trang web để thực hiện định dạng nhanh và sau đó sao chép / dán ngay vào SSMS.


Cảm ơn các mẹo về SQL kém. Gonna giữ cái đó nhét trong túi sau của tôi cho chắc chắn!
Kris Gruttemeyer

3
Một cách tốt khác (cũng hữu ích để định dạng mã cho blog) là Trình mở rộng SQL của Simple-Talk .
Aaron Bertrand

Vì vậy, mặc dù tài liệu của Microsoft nói rằng nó có thể định dạng, SSMS không thể?

SQL kém cũng có một bổ trợ cho Notepad ++. Không chắc chắn lý do tại sao bạn sẽ không sử dụng trình cắm SSMS. Nó hoạt động rất tốt khi cuối cùng họ đã làm cho nó hoạt động với SSMS 2012+.
Jonathan Fite


2

SqlSmash là một công cụ thương mại cho phép bạn định dạng SQL của mình (và nhiều hơn nữa) trong SSMS 2012 và 2014. Phím tắt mặc định là (Ctrl + K, Ctrl + D).
Disclaimer: Tôi là nhà phát triển đằng sau nó.


Vui lòng thêm rằng công cụ này không miễn phí.
ypercubeᵀᴹ

Có một phiên bản cộng đồng miễn phí.
Jason Geiger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.