请在 stackoverflow 上查看此问题:
我正在使用 EasySoft ODBC 驱动程序将 SQL Server 2008 R2 Express 实例链接到 Interbase,但在从远程服务器获取元数据时遇到了一些困难。从网上看,主要建议都提到使用 OPENQUERY 而不是四部分链接服务器语法。
EG 我目前的(有问题的)方法是......
Run Code Online (Sandbox Code Playgroud)CREATE VIEW [LIVE].[vwPRDETS] AS SELECT * FROM [LBLIVE]...[PRDETS] WITH (NOLOCK)
但是在某些表上,调用视图时出现错误...
消息 7353,级别 16,状态 1,第 1 行链接服务器“LBLIVE”的 OLE DB 提供程序“MSDASQL”提供了不一致的元数据。在执行期间提供了一个在编译时找不到的额外列。
此外,我什至无法创建一些视图,因为我得到以下...
消息 7315,级别 16,状态 1,第 1 行 链接服务器“LBLIVE”的 OLE DB 访问接口“MSDASQL”包含多个与名称“SYSDBA”.“AUDIT_LBABKP”相匹配的表。
虽然只提到了其中一张表。
搜索网络的替代方法似乎更像是......
Run Code Online (Sandbox Code Playgroud)SELECT * FROM OPENQUERY(<linked sevrer>, 'SELECT <column list> FROM MyTable')
所以,我的问题是,如果我在视图定义中使用 OPENQUERY,SQL Server 是否能够优化发送到 Interbase 的结果 SQL?或者这两种方法之间真的没有太大区别?
这是一个交叉主题,会喜欢 dba 的 POV。
直接连接到远程 sql 服务器的 Management Studio 查询窗格SELECT * FROM table
在不到2 秒的时间内执行并显示 ( )的简单表查询。
相同的 Management Studio,但现在来自本地连接的查询窗格,在本地定义的链接服务器 (SQLNCLI10) 上执行相同的查询现在需要7 秒。
比较客户端统计数据,虽然在两种情况下服务器往返次数均为 1,但我确实看到第一个中的“客户端处理”仅为1794ms,而在链接服务器上为5741ms。链接服务器上的“服务器回复等待时间”也高于967ms与187ms。
这是两端的 SQL Server 2008 R2 64 并且在同一个域中。
谁能解释一下?