2009-07-28 36 views
13

Vì vậy, tôi đã có một câu lệnh SQL mà pared xuống trông giống như sau:Trình tự (nolock) và bí danh bảng trên SQL Server

SELECT column 
FROM table t (nolock) 
LEFT OUTER JOIN table2 (nolock) t2 on t.id = t2.id 

Tuyên bố này hoạt động trên môi trường SQL 2005 và SQL 2008 của tôi. Nó không có trên môi trường SQL 2005 từ xa. Tôi đã chuyển dòng cuối cùng thành:

LEFT OUTER JOIN table2 t2 (nolock) on t.id = t2.id 

Điều này hoạt động trong môi trường từ xa.

Bỏ qua các vấn đề cho dù (nolock) là thích hợp và cú pháp phải duy trì nội bộ nhất quán, bất kỳ ý tưởng nào tại sao điều này xảy ra? Tôi đã cố gắng để tìm kiếm hotfix/KBs mà xử lý này và đã đưa ra không có gì. Có một thiết lập trên máy chủ SQL có thể gây ra hành vi này?

+4

cấp độ tương thích gì là cơ sở dữ liệu thiết lập để? –

+1

"hoạt động" và "Nó không có trên .." có nghĩa là, bạn nhận được thông báo lỗi và/hoặc khóa? –

Trả lời

8

Kiểm tra mức độ tương thích của cơ sở dữ liệu của bạn.

Phải là 90 để cú pháp này hoạt động.

Chỉ cần kiểm tra:

sp_dbcmptlevel 'test', 80 

DBCC execution completed. If DBCC printed error messages, contact your system administrator. 

SELECT TOP 100 * 
FROM master t (nolock) 
LEFT OUTER JOIN master (nolock) t2 on t.id = t2.id 

Сообщение 102, уровень 15, состояние 1, строка 3 
Incorrect syntax near 't2'. 
+0

Chưa thấy mức độ tương thích trước đây. Hoàn hảo, cảm ơn! – Matt

4

Tôi không chắc chắn nhưng có thể do compatibility level gây ra?

Vì SQL 2005 theo cú pháp chính xác mặc định của gợi ý là WITH (NOLOCK) và có thể đây là lý do.

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