Table 链接服务器查询提示
Table hint on linked server query
我们在 AS400 中有一个 DB2 数据库。添加了一个链接服务器,一切顺利,但有时 table 被锁定,即使我们进行一些 select 查询也是如此。考虑 SQL 服务器中的 table 提示,链接服务器查询(例如 select * from ...)是否支持 table 提示?
有疑问,但我不确定。
您使用的是 openquery() 还是 4 部分名称?
使用 4 个部分名称的查询,如下所示:
select * from LNKSVRNAME.IBMINAME.MYSCHEMA.MYTABLE where somecolumn = '00335';
从 MYTABLE
拉回所有行并在 MS SQL 服务器上进行 WHERE
过滤。
相比之下,像这样使用 openquery():
select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335''');
将查询发送到 IBM i,并且只有来自 MYTABLE 的匹配行被拉回 MS SQL 服务器。
如果 table 被独占锁定,您将无能为力。但是,如果您 运行 进入行锁。您可能需要查看以下 DB2 for IBM i 子句
FOR READ ONLY
SKIP LOCKED DATA
或 USE CURRENTLY COMMITTED
或 WAIT 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 POWER System 运行 相对较新的 IBM i 版本,那么我展示的 concurrent-access-resolution
子句应该可用。
我们在 AS400 中有一个 DB2 数据库。添加了一个链接服务器,一切顺利,但有时 table 被锁定,即使我们进行一些 select 查询也是如此。考虑 SQL 服务器中的 table 提示,链接服务器查询(例如 select * from ...)是否支持 table 提示?
有疑问,但我不确定。
您使用的是 openquery() 还是 4 部分名称?
使用 4 个部分名称的查询,如下所示:
select * from LNKSVRNAME.IBMINAME.MYSCHEMA.MYTABLE where somecolumn = '00335';
从 MYTABLE
拉回所有行并在 MS SQL 服务器上进行 WHERE
过滤。
相比之下,像这样使用 openquery():
select * from openquery(LNKSVRNAME, 'select * from MYSCHEMA.MYTABLE where somecolumn = ''00335''');
将查询发送到 IBM i,并且只有来自 MYTABLE 的匹配行被拉回 MS SQL 服务器。
如果 table 被独占锁定,您将无能为力。但是,如果您 运行 进入行锁。您可能需要查看以下 DB2 for IBM i 子句
FOR READ ONLY
SKIP LOCKED DATA
或USE CURRENTLY COMMITTED
或WAIT 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 POWER System 运行 相对较新的 IBM i 版本,那么我展示的 concurrent-access-resolution
子句应该可用。