【问题标题】:Table hint on linked server query链接服务器查询的表提示
【发布时间】:2016-04-14 17:27:55
【问题描述】:

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

【问题讨论】:

    标签: sql-server db2 linked-server


    【解决方案1】:

    怀疑,但我不确定。

    您使用的是 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 子句应该是可用的。

    【讨论】:

      猜你喜欢
      • 2011-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 1970-01-01
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多