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