2

我今天遇到了一个问题,试图使用NOLOCK. 我收到了这个错误:

Remote table-valued function calls are not allowed.

在谷歌搜索这个问题后,我发现添加WITH (NOLOCK)可以纠正这个问题。我想知道为什么会这样?

SQL:

SELECT *
FROM [LINKED_SRV].[DB1].[dbo].[REMOTE_TABLE] WITH (NOLOCK)
4

2 回答 2

3

引用表格提示的文档

重要的

省略 WITH 关键字是一项已弃用的功能:此功能将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用此功能,并计划修改当前使用此功能的应用程序。

允许使用和不使用 WITH 关键字的下表提示:NOLOCK、READUNCOMMITTED、UPDLOCK、REPEATABLEREAD、SERIALIZABLE、READCOMMITTED、TABLOCK、TABLOCKX、PAGLOCK、ROWLOCK、NOWAIT、READPAST、XLOCK 和 NOEXPAND。如果在没有 WITH 关键字的情况下指定这些表提示,则应单独指定这些提示。

该文档指出,对于您尝试的查询,WITH允许省略关键字。基于此,我认为这是一个错误。但是,文档还声明此功能已被弃用,并将在 SQL Server 的未来版本中删除,因此您不应期望通过更改文档之外的任何其他方式修复此错误。

我怀疑解析器看到FROM server.database.schema.table (并确定这是对用户定义函数的调用,因此是一个错误,并且永远不会到达它认为NOLOCK不是函数参数的地步。

于 2013-06-21T19:32:26.130 回答
0

诺锁

此表提示(也称为 READUNCOMMITTED)仅适用于 SELECT 语句。NOLOCK 表示没有对表发出共享锁,以阻止其他事务修改表中的数据。

http://www.techrepublic.com/article/using-nolock-and-readpast-table-hints-in-sql-server/6185492

于 2013-06-21T19:35:30.077 回答