Các truy vấn sau đây trả về không có kết quả và không có lỗi về SQL Server 2008 (thử nghiệm trên SP1), bạn có thể chạy nó chống lại bất kỳ cơ sở dữ liệu, thậm chí thạc sĩ:Vai trò của dấu ngoặc đơn trong truy vấn SELECT của SQL Server?
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
(SELECT * FROM computed_table)
UNION
(SELECT * FROM another_table_that_does_not_exists)
Mở SQL Server 2005, bạn nhận được một lỗi vì bảng không tồn tại. Bạn nhận được cũng nhận được một lỗi nếu bạn loại bỏ một số dấu ngoặc đơn:
WITH computed_table (id) AS
(
SELECT id FROM this_table_does_not_exist
)
SELECT * FROM computed_table
UNION
(SELECT * FROM another_table_that_does_not_exists)
Cùng một loại vấn đề xuất hiện với bảng thực: trên một số trường hợp, các truy vấn không trả lại kết quả nào, và nếu bạn làm cho một số một số thay đổi nhỏ , giống như loại bỏ một dấu cách hoặc một vận chuyển, nó hoạt động trở lại ...
Tôi nghĩ rằng có thể có vấn đề trong truy vấn, vì SELECT được đính kèm trong dấu ngoặc đơn có thể được hiểu là biểu thức thay vì truy vấn con, trong this page. Nhưng điều đó ít nhất phải trả lại một lỗi.
Tôi có thiếu gì đó không?
Chỉnh sửa 26/06/2010: Tôi đã chạy một số phiên lược tả, với các kết quả sau.
Đối với các truy vấn trên, chuỗi các sự kiện là:
- Exception (Lỗi: 208, tên đối tượng không hợp lệ)
- SQL: BatchStarting
- SQL: StmtStarting
- SQL: BatchCompleted
Đối với truy vấn không có dấu ngoặc đơn:
- Exception (Lỗi: 208)
- SQL: BatchStarting
- SQL: StmtStarting
- Exception (Lỗi: 208)
- Lỗi tài khoản tin nhắn (tên đối tượng không hợp lệ 'this_table_does_not _exist')
- SQL : BatchCompleted
Đối với một truy vấn làm việc:
- SQL: BatchStarting
- SQL: StmtStarting
- Showplan Tất cả
- SQL: StmtCompleted
- SQL: BatchCompleted
tôi cũng chạy một trong các truy vấn với các bảng thực sự mà gây cho tôi cùng vấn đề.Chuỗi các sự kiện là:
- SQL: BatchStarting
- SQL: StmtStarting
- SQL: BatchCompleted
Không sớm "ngoại lệ" => các bảng tồn tại. Không "SQL: StmtCompleted" => có nghĩa là đã xảy ra lỗi, tôi không thể thấy bất kỳ lý do nào khác khiến sự kiện này không được nâng lên. Không "Showplan All" => nó có nghĩa là lỗi xảy ra trước (hoặc khi) kế hoạch thực hiện được tính toán. Nó có thể được gây ra bởi sự kết hợp của cte và dấu ngoặc đơn.
Tôi sẽ nêu vấn đề với sự hỗ trợ của Microsoft vào tuần tới.
bạn đã thử thay đổi tên * thành tên cột thực tế chưa? – DForck42
thật là một câu hỏi tuyệt vời! Đầu tiên, trong năm 2008, bạn cũng gặp lỗi trên câu lệnh thứ hai. Ngoài ra, tôi không thấy rằng tuyên bố UNION có bất cứ điều gì để làm với các hành vi lạ như loại bỏ các công đoàn và lựa chọn thứ hai dường như không thay đổi kết quả. Một điều thú vị - khi sử dụng câu lệnh đầu tiên, và yêu cầu một kế hoạch thực hiện ước tính, tôi hoàn toàn không có kế hoạch nào. Tôi sẽ chạy một dấu vết ngay bây giờ. TTYL. – MaasSql
Bạn cũng sẽ đăng mã được giới thiệu bởi: "Tôi cũng đã chạy một trong các truy vấn với các bảng thực đang khiến tôi gặp vấn đề tương tự." Ngoài ra, trong sự tò mò tinh khiết, bạn có coi đây là một công cụ chặn để phát triển/vấn đề sản xuất không? Nếu có, có vẻ như cách giải quyết sẽ không tuân theo cte, sau đó là mẫu dấu ngoặc đơn. – MaasSql