2012-06-28 20 views
8

Nó không thực sự là một vấn đề mà tôi đang phải đối mặt. Nhưng tôi chỉ tự hỏi rằng dòng đầu tiên trong mã được viết dưới đây sẽ được xử lý như là một lỗi cú pháp của SQL Server vì dấu phẩy thêm (,) ở cuối danh sách cột. Nhưng nó chạy mã tốt. Có ai biết lý do không?Tại sao SQL Server không xử lý mã này thất thường?

CREATE TABLE #TEMP(COL1 INT,COL2 VARCHAR,)  
INSERT INTO #TEMP VALUES (1,'A')  
SELECT * FROM #TEMP  
DROP TABLE #TEMP 
+0

tôi cho rằng đó là một thiết kế quyết định giảm sql động, khi bạn không phải bỏ qua dấu phẩy. Tương tự như tại sao LINQ cho phép một kiểu ẩn danh như vậy trong C#: 'new {a = 1, b = 2, c = 3,}'. –

+6

Không được phép bởi [ngữ pháp] (http://msdn.microsoft.com/en-us/library/ms174979.aspx) nhưng [chủ yếu là vô hại] (https://connect.microsoft.com/SQLServer/ feedback/details/273348/trailing-comma-allowed-in-create-table) –

+1

@Martin Smith: Điều đó phụ thuộc, nếu n trong sơ đồ bao gồm 0 hay không. Cú pháp không chứa định nghĩa (ít nhất là không tìm thấy). – Stefan

Trả lời

1

Nó phải được gắn cờ là lỗi cú pháp, nhưng có lỗi trong SQL Server không xử lý dấu phẩy sau làm lỗi cú pháp.

Nguồn: Microsoft Support (Các phiên bản bị ảnh hưởng trong danh sách - 6, 6.5, và 2000 - là cũ, nhưng tôi đoán nó vẫn còn xung quanh bởi vì nó chỉ làm việc cho tôi trong năm 2008.)

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