2009-07-28 117 views
13

的订购(NOLOCK)和表的别名,所以我已经得到了相比下来SQL语句看起来是这样的:SQL服务器

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

本声明适用于我的SQL 2005和SQL 2008环境。它不在远程SQL 2005环境中。我已将最后一行切换为:

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

这适用于远程环境。

抛开(nolock)是否合适以及语法应该保持内部一致的问题,为什么会出现这种情况?我试图搜索处理这个问题的修复程序/知识库并且什么都没有提出。是否有可能导致此行为的SQL服务器上的设置?

+4

是将数据库设置为兼容什么水平? – 2009-07-28 15:21:40

+1

什么是“有效”和“它没有......”是指你会得到一个错误信息和/或锁定? – 2009-07-28 15:27:46

回答

8

检查您的数据库兼容性级别。

它应该是90为此语法工作。

刚才检查:

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'. 
4

我不确定,但可能是由compatibility level引起的?

由于默认情况下,SQL 2005的正确语法提示是WITH (NOLOCK),也许这就是原因。