高手进!OPENDATASOURCE 和 OPENROWSET的区别
在查询分析器中,执行下面的三条访问远程数据库中的数据,
1和2使用OPENDATASOURCE,执行不成功,一个用ip,一个用数据库名,出错信息不一样。
3用OPENROWSET 却能成功执行。
请问为什么?使用OPENDATASOURCE 和 OPENROWSET 有什么区别?
-- 1------------------------
SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB'
,'Data Source=XXX.XXX.XXX.XXX;User ID=sa; Password=sa).dbname.dbo.a
-- 出错信息
server : message 7399、level 16、status 1、行 1
OLE DB Provider 'SQLOLEDB' Reports the errors。
[OLE/DB provider returned message: [DBNETLIB][ConnectionOpen (Connect()).]SQL Server 不存在、拒绝访问。]
OLE DB Error Trace [OLE/DB Provider 'SQLOLEDB' IDBInitialize::Initialize returned 0x80004005: ]。
-- 2 ------------------------
SELECT *
FROM OPENDATASOURCE(
'SQLOLEDB'
,'Data Source=ServerName;User ID=sa; Password=sa).dbname.dbo.a
-- 出错信息
server : message 7311、level 16、状態 2、行 1
未能获得 OLE DB 提供程序 ''%1!'' 的架构行集。该提供程序支持该接口,但使用该接口时返回了失败代码。
OLE DB Error Trace [OLE/DB Provider 'SQLOLEDB' IDBSchemaRowset::GetRowset returned 0x80040154: ]。
-- 3 ------------------------------------
SELECT *
FROM OPENROWSET(
'SQLOLEDB',
'ServerName';
'sa';
'sa',
'select * from dbname.dbo.a')