欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首

程序员文章站 2024-02-27 19:08:33
...

前言:

最近在一个数据库上需要通过创建的链接服务器,跨数据库访问另外一个数据库,报错“不允许使用远程表值函数调用”,现象如下:

相同数据库链接、相同查询语句在不同版本数据库中通过链接服务器跨数据库查询结果对比

SELECT * FROM [HRDB_192.168.***.122].HRDB.dbo.A01 (NOLOCK)  WHERE A0190='GCS-0056' SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首

总结:

应该是最新的数据库兼容性级别不允许在链接服务器查询时直接使用(NOLOCK),解决方法如下:

1>:在(NOLOCK)前面加上WITH ,语句详见如下:

SELECT * FROM [HRDB_192.168.***.122].HRDB.dbo.A01 WITH(NOLOCK) WHERE A0190='GCS-0056'

2>:把(NOLOCK)直接拿掉,语句详见如下:

SELECT * FROM [HRDB_192.168.***.122].HRDB.dbo.A01  WHERE A0190='GCS-0056'

一:创建完链接服务器我特意测试连接,是OK的如下图:

SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首


二:跨数据库查询报错“不允许使用远程表值函数调用”!如下图:

特别说明:当前报错的数据库兼容性级别为:SQL Server 2008(100)

SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首


三:而一模一样的跨数据库查询语句在另外一台服务器查询却正常

特别说明:当前正常的数据库兼容性级别为:SQL Server 2000(80)

SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首


四:在(NOLOCK)前面加上WITH即可正常查询了!

特别说明:当前报错的数据库兼容性级别为:SQL Server 2008(100)

SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首

相关标签: 小小笔录