SQL Server上的(nolock)和表别名的顺序

时间:2009-07-28 15:16:47

标签: sql sql-server sql-server-2005

所以我有一个减少的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服务器上是否存在可能导致此行为的设置?

3 个答案:

答案 0 :(得分:9)

检查数据库兼容级别。

此语法应该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'.

答案 1 :(得分:4)

我不确定,但也许是compatibility level造成的?

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

答案 2 :(得分:0)

添加到https://stackoverflow.com/a/1194913/2200690的答案中, 如果您的数据库名称是AdventureWorks,则可以使用以下SQL找出兼容性级别:

USE AdventureWorks2012;  
GO  
SELECT compatibility_level  
FROM sys.databases WHERE name = 'AdventureWorks2012';  
GO