跨系统-跨数据库访问表或创建映射视图-PB访问数据库的特殊处理

 一、 在项目中可能会遇到在一个项目中会出现多个数据库的操作。

 二、 也可能会多个系统多个数据库之间进行交互操作显示。

 三、 经常需要两个数据库关联查询或需要翻译显示内容时会很麻烦。

 四、 今天就有个简单而实用的方法。一起来看看吧。

 

1.基本语法:

  select 字段名 from  OPENDATASOURCE ('SQLOLEDB', 'Data Source=[IP地址];USER ID = [用户名] ;Password=[数据库密码]' ).[数据库名].dbo.[表名] AS Rowset_1

2.如果有需要跟其它表进行关联查询的话,可以创建视图映射到本地数据库中如下:

create view V_SNF_CurrentStock
as 
  select cInvCode,iQuantity,cWhCode from OPENDATASOURCE ('SQLOLEDB', 'Data Source=192.168.1.8;  USER ID = sa ;Password=123' ).SNFDB.dbo.CurrentStock AS Rowset_1

五、如果以上SQL语句执行不成功的话,报以下错误:

  错误信息:SQL Server数据库远程操作中,在使用openrowset/opendatasource前首先要启用Ad Hoc Distributed Queries服务,因为这个服务不安全所以SqlServer默认是关闭的。

处理方法如下:

第一种:启用Ad Hoc Distributed Queries的方法
SQL Server 阻止了对组件'Ad Hoc Distributed Queries' 的STATEMENT'OpenRowset/OpenDatasource'的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。系统管理员可以通过使用。
sp_configure 启用 'Ad Hoc Distributed Queries'。 启用Ad Hoc Distributed Queries的方法,执行下面的查询语句就可以了: exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure 使用完毕后,记得一定要关闭它,因为这是一个安全隐患,切记执行下面的SQL语句: exec sp_configure 'Ad Hoc Distributed Queries',0 reconfigure exec sp_configure 'show advanced options',0 reconfigure

 如果都是内部管理类系统的话,可以打开后不进行关闭,这样用起来会更方便一些。

 第二种:sql server 2008 64位连接sql 2000服务器的时候出现以下提示:

  链接服务器"seeker2k4"的 OLE DB 访问接口 "SQLNCLI10" 返回了消息 "Unspecified error"。 Msg 7311, Level 16, State 2, Line 1 无法获取链接服务器 "seeker2k4" 的 OLE DB 访问接口 "SQLNCLI10" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。 

此前SP4的补丁已安装。

方法:

  在sql2000 中打开查询分析器:

  执行SP4补丁包中\SQL2KSP4\install\instcat.sql

  即可。

 ----------------------------------

二、.以上可以查询,但在PB中却不能执行,还需要执行如下命令

ALTER DATABASE sms --DataBase数据库名称
SET ANSI_NULL_DEFAULT ON,
ANSI_NULLS ON,
ANSI_PADDING ON,
ANSI_WARNINGS ON

 

 

posted @ 2013-10-15 19:44  王春天  阅读(2045)  评论(2编辑  收藏  举报
云推荐