Có ý nghĩa gì khi sử dụng ký hiệu ngoặc của SQL Server trong mã viết tay không?


15

Trình tạo mã có xu hướng đơn giản hơn khi chúng tạo đầu ra bằng cách sử dụng ký hiệu khung Microsoft mới ( []) cho hầu hết mọi thứ.

Khi tôi lần đầu tiên nhìn thấy nó, tôi mặc dù wow một tái sinh của ký hiệu định danh được trích dẫn có phần bị cấm.

Theo như tôi biết thì đây là một phần mở rộng độc quyền của Microsoft (có nghĩa là Oracle không hỗ trợ nó).

Nhìn vào SQL Server, không có sự khác biệt nếu bạn định nghĩa một bảng như

CREATE TABLE [dbo].[Table_2] ([col1] [int], [col2] [int]);

hoặc là

CREATE TABLE dbo.Table_2 (col1 int, col2 int);

Đó là một vấn đề của phong cách cá nhân hoặc công ty. Hãy kiên định.

Bây giờ nếu bạn muốn di chuyển cơ sở dữ liệu của mình sang Oracle, dấu ngoặc không có tùy chọn.

Bạn có thể sử dụng các định danh được trích dẫn cũ, nhưng đây là những trường hợp nhạy cảm gây ra nhiều rắc rối.

Có phải là một ý tưởng tốt để xóa tất cả dấu ngoặc khỏi mã được tạo, tránh sử dụng khoảng trắng, các ký tự đặc biệt khác và từ khóa dành riêng cho tên và chỉ mã theo cách mà hầu hết DBMS hiểu?

Câu trả lời:


12

SQL chuẩn sử dụng trích dẫn kép "cho các định danh được trích dẫn. SQL Server hỗ trợ điều này bằng cách sử dụng QUOTED_IDENTIFIERtùy chọn (ANSI_QUOTES trong myQuery). SQL tiêu chuẩn cải thiện tính di động nói chung và trong trường hợp này sẽ chuyển sang Oracle. Tương tự, tôi sẽ thay đổi từ khóa SQL thành chữ hoa (yêu cầu SQL-92 trung cấp) và mở rộng intsang INTEGER(yêu cầu SQL-92 cấp nhập cảnh).

Không cần sử dụng các định danh được trích dẫn, bất kể hương vị gì, nên tránh, IMO.


10

Đây là một vấn đề chủ quan, nhưng dấu ngoặc không cần thiết nằm gần đầu danh sách thú cưng của tôi - hơi khó chịu hơn lỗi chính tả "! =", Nhưng không tệ như dấu phẩy hàng đầu trong danh sách cột.

Nói một cách khách quan, hãy xem xét mục đích của dấu ngoặc: cho phép các tên đối tượng không hợp pháp theo cách khác. Vì mục đích đó, dấu ngoặc là một mùi mã kém nhất và là dấu hiệu của sự lười biếng nhất.


Dấu phẩy hàng đầu làm cho nó rõ ràng rõ ràng nơi các cột mới bắt đầu. Chân đế chắc chắn không phải là mùi mã vì chúng phân định rõ ràng tên cột là gì và không phải là gì. Tôi không nói rằng bạn phải sử dụng chúng, nhưng để nói rằng chúng chỉ ra vấn đề là quá tầm với.
Max Vernon

9
  • Chân đế được yêu cầu nếu tên bảng hoặc cột của bạn:

    Rõ ràng, nếu bạn có quyền kiểm soát lược đồ thì tránh sử dụng các tên như thế này. Tuy nhiên, trong một số trường hợp, tên tốt nhất là tên dành riêng (nhưKEY cho cột khóa trong bảng giá trị khóa chung), do đó, bạn phải quyết định mức độ bạn muốn sử dụng nó tệ đến mức nào (và do đó phải trích dẫn nó ở mọi nơi).

    Tôi cũng sử dụng dấu ngoặc để loại bỏ tô sáng màu xanh mà SSMS và VS đưa ra một số từ khóa như DESCRIPTION SQL Server dành riêng nhưng lại đặc biệt đối với các công cụ đó.

  • Chắc chắn sử dụng dấu ngoặc khi tạo động SQL. Cách dễ dàng để làm như vậy là bằng cách gọi QUOTENAME()vào các đối tượng bạn đang tham chiếu động (ví dụ SELECT QUOTENAME(name) FROM sys.databases;). sp_MSforeachdb, ví dụ, không làm điều này .


6

Khi tôi viết mã tạo mã, tôi đặt dấu ngoặc vuông xung quanh tên đối tượng cơ sở dữ liệu. Tôi không bao gồm dấu ngoặc khi viết mã bằng tay và tôi thấy nó làm mất khả năng đọc của mã. Tôi cũng cấm tên đối tượng cơ sở dữ liệu với khoảng trắng. SQL Server sẽ cho phép bạn sử dụng khoảng trắng trong tên đối tượng, nhưng điều đó không có nghĩa đó là một điều tốt.


6

Tôi thậm chí có thể không cố gắng để có DDL di động. Tôi sẽ tốt hơn nếu tôi tạo các định nghĩa bảng của Oracle khỏi chế độ xem hệ thống của SQL Server, nếu cần.

Tôi không nghĩ việc viết DML di động cũng có ý nghĩa - PL / SQL hoàn toàn khác với T-SQL. Đối với tính di động, việc hiển thị cơ sở dữ liệu của bạn thông qua API của các thủ tục được lưu trữ sẽ dễ dàng hơn. Chữ ký của các quy trình này phải giống nhau trên cả hai nền tảng, nhưng việc triển khai có thể sử dụng các tính năng độc quyền - nói chung, điều này dễ hơn nhiều so với việc cố gắng chỉ sử dụng SQL tiêu chuẩn ANSI.

Kết luận này dựa trên nhiều năm kinh nghiệm trong việc phát triển các hệ thống di động, hoạt động trên cả Oracle và SQL Server.

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.