2013-02-05 50 views
7

Tôi có tập lệnh sau đây và muốn thay đổi nó để nó phù hợp với các tiêu chuẩn quốc tế. Tôi sử dụng SQL-Server nhưng bất cứ khi nào có thể tôi muốn làm theo các tiêu chuẩn quốc tế cho SQL. Tôi không tin rằng các dấu ngoặc vuông là tiêu chuẩn - tôi có nên thay thế chúng bằng dấu ngoặc kép không?Áp dụng các tiêu chuẩn SQL cho tập lệnh

Không trả tiền để lấy bản sao tài liệu chuẩn có bất kỳ tài nguyên nào trên internet cung cấp ví dụ về các kịch bản được định dạng và trình bày chính xác theo yêu cầu của tiêu chuẩn không?

SELECT 
    a.UserAccountKey, 
    SUM(ISNULL(b.[measure Y],0.0)) AS "measure Y", 
    SUM(ISNULL(c.[measure Z],0.0)) AS "measure Z" 
FROM 
    XXX a 
    LEFT OUTER JOIN YYYY b ON 
     a.UserAccountKey = b.UserAccountKey 
    LEFT OUTER JOIN ZZZZ c ON 
     a.UserAccountKey = c.UserAccountKey 
GROUP BY 
    a.UserAccountKey 

EDIT

duy nhất của tôi nhẹ sở thích đó không phải là tiêu chuẩn cổ điển là như sau. Điều này đã được đưa ra bởi AaronBertrand và tôi đồng ý rằng đó là dễ đọc hơn - đặc biệt là nếu mệnh đề SELECT có 20 hoặc 30 lĩnh vực:

SELECT 
    a.UserAccountKey, 
    "measure Y"    = SUM(ISNULL(b."measure Y",0.0)), 
    "measure Z"    = SUM(ISNULL(c."measure Z",0.0)), 
    "measure longertitle" = SUM(ISNULL(c."measure longertitle",0.0)), 
    "me short"    = SUM(ISNULL(c."me short",0.0)) 
FROM 
+0

Trong thực tế, bạn có thể sử dụng sqlfiddle.com và xem nếu truy vấn của bạn (hoặc tập hợp con nhỏ của nó) chạy mà không phàn nàn trên tất cả các cơ sở dữ liệu mà sqlfiddle.com hỗ trợ: MSSQL, Oracle, MySQL, Postgres, SQLite – mvp

+3

+1 để quan tâm đến các tiêu chuẩn –

+0

tăng nhận xét của bạn (....bạn bắt đầu tôi quan tâm đến các tiêu chuẩn) – whytheq

Trả lời

7

Thay đổi ISNULL-COALESCE và dấu ngoặc vuông để " và sau đó it validates.

SELECT a.UserAccountKey, 
     SUM(COALESCE(b."measure Y", 0.0)) AS "measure Y", 
     SUM(COALESCE(c."measure Z", 0.0)) AS "measure Z" 
FROM XXX a 
     LEFT OUTER JOIN YYYY b 
     ON a.UserAccountKey = b.UserAccountKey 
     LEFT OUTER JOIN ZZZZ c 
     ON a.UserAccountKey = c.UserAccountKey 
GROUP BY a.UserAccountKey; 

này có nghĩa là bạn cần phải đảm bảo rằng QUOTED_IDENTIFIERON trong SQL Server.

+0

1 cho lời giải thích và tham khảo tốt đẹp - xấu hổ mimer không thực sự cho tôi sửa mã thay vì chỉ là nơi các lỗi được đặt. – whytheq

+0

về mặt định dạng, ngoài ngón tay của tôi, có một số công cụ có thể nhanh chóng chuẩn hóa định dạng tập lệnh của tôi không? – whytheq

+0

@whytheq - Không có tiêu chuẩn quốc tế về định dạng, chỉ cú pháp. Có nhiều prettifiers thương mại khác nhau. Chẳng hạn như SQL Pretty Printer hoặc Redgate SQL Prompt. –

2

Trình định dạng T-SQL miễn phí trực tuyến tốt là http://www.tsqltidy.com/, tức là cho SQL Server. Cẩn thận vì quản trị tường lửa của bạn có thể đột nhiên được cảnh báo về một cuộc tấn công SQL Injection (một số lỗi tường lửa sử dụng trang web để tấn công). Nếu không thì có các công cụ thương mại có khả năng định dạng - SQL Complete (DevArt) và SQL Prompt (Red Gate).

Đối với "SQL tiêu chuẩn quốc tế", đó sẽ là một trang blog của riêng nó. Tiêu chuẩn ANSI nào (1992, SQL3, ...) và mức nào?

Có thể giúp bạn với các dấu ngoặc kép, sử dụng SET QUOTED_IDENTIFIER ON; trước SQL của bạn, và sau đó tắt sau đó (SET QUOTED_IDENTIFIER OFF;). Điều đó có nghĩa là bạn không cần phải bật nó cho toàn bộ cơ sở dữ liệu. Nhưng, đó là ý tưởng hay KHÔNG sử dụng mã định danh có dấu cách và ký tự không chuẩn (giống như C# với mã như "... kiểu đối tượng mới mà tôi vừa tạo ~() ..." - sẽ không thực tế lắm).

Điều đó có được tính là 2 câu trả lời và một câu hỏi khác không?

+0

+1 cảm ơn cho thông tin - Tôi sẽ dành một chút thời gian kiểm tra sqltidy – whytheq

+0

... Tôi đã thêm một chỉnh sửa của OP cho thấy lý do tại sao tsqltidy có lẽ sẽ không làm việc cho tôi – whytheq

1

Dưới đây là danh sách tốt các nguồn lực cho các tiêu chuẩn SQL với các tài liệu khác nhau và tất cả mọi thứ: http://gerardnico.com/wiki/language/sql/ansi

Nếu bạn đang tìm kiếm một định dạng t-SQL cho mã hiện tại của bạn, bạn cũng có thể kiểm tra ApexSQL Refactor. Đây là một plugin SSMS miễn phí tương tự như SQL Promt từ Red Gate.

0

Một nguồn lực lớn là SQL Cop, mà là một công cụ miễn phí để xác định các vấn đề và gợi ý thực hành tốt nhất:

http://sqlcop.lessthandot.com/

Các vấn đề liên quan