关于链接服务器查询的表提示

时间:2016-04-14 17:27:56

标签: sql-server db2 linked-server

我们在AS400中有一个DB2数据库。添加了一个链接服务器,一切顺利,但有时候表被锁定,即使我们做了一些选择查询。考虑SQL Server中的表提示,链接服务器查询(例如select * from ...)是否支持表提示?

1 个答案:

答案 0 :(得分:0)

令人怀疑,但我不确定。

您使用的是openquery()还是4个部分名称?

使用4个部分名称的查询,如下所示:

select * from LNKSVRNAME.IBMINAME.MYSCHEMA.MYTABLE where somecolumn = '00335';

MYTABLE撤回所有行,并在MS SQL Server上执行WHERE过滤。

相比之下,使用openquery()就像这样:

select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335''');

将查询发送到IBM i,只有来自MYTABLE的匹配行被拉回到MS SQL Server中。

如果桌子被独占锁定,那么你无能为力。但是,如果你遇到行锁。您可能希望查看以下DB2 for IBM i子句

  • FOR READ ONLY
  • SKIP LOCKED DATAUSE CURRENTLY COMMITTEDWAIT FOR OUTCOME

这样的事情:

select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335'' FOR READ ONLY USE CURRENTLY COMMITTED');

注意如果您实际上在与AS / 400通话,FOR READ ONLY就是您可以使用的全部内容。但是,如果您正在与运行相对较新版本的IBM i的相对较新的IBM POWER System进行交流,那么我显示的concurrent-access-resolution条款应该可用。