SQL Server 链接服务器“不允许使用远程表值函数调用”(NOLOCK)是罪魁祸首
程序员文章站
2024-02-27 19:08:33
...
前言:
最近在一个数据库上需要通过创建的链接服务器,跨数据库访问另外一个数据库,报错“不允许使用远程表值函数调用”,现象如下:
相同数据库链接、相同查询语句在不同版本数据库中通过链接服务器跨数据库查询结果对比
SELECT * FROM [HRDB_192.168.***.122].HRDB.dbo.A01 (NOLOCK) WHERE A0190='GCS-0056'
总结:
应该是最新的数据库兼容性级别不允许在链接服务器查询时直接使用(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 2008(100)
三:而一模一样的跨数据库查询语句在另外一台服务器查询却正常
特别说明:当前正常的数据库兼容性级别为:SQL Server 2000(80)
四:在(NOLOCK)前面加上WITH即可正常查询了!
特别说明:当前报错的数据库兼容性级别为:SQL Server 2008(100)
上一篇: 搜索引擎之分词器学习
下一篇: day12 泛型与枚举