10

I have created a linked oledb/odbc connection to Pervasive SQL from SQL SERVER 2012:

USE [master]
GO

/****** Object:  LinkedServer [KSLAP208]    Script Date: 2/8/2013 10:38:55 AM ******/
EXEC master.dbo.sp_addlinkedserver @server = N'KSLAP208', @srvproduct=N'Pervasive ODBC Interface', @provider=N'MSDASQL', @datasrc=N'C003', @location=N'localhost'
 /* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'KSLAP208',@useself=N'False',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL

GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'collation compatible', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'data access', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'dist', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'pub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'rpc', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'rpc out', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'sub', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'connect timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'collation name', @optvalue=null
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'lazy schema validation', @optvalue=N'false'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'query timeout', @optvalue=N'0'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'use remote collation', @optvalue=N'true'
GO

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO

Test Connection is succesful.

However, when I try to select from a database:

select * from [KSLAP208].[C003]..PA_Profile_BASE_1119 

I immdiately get just the field names returned and then immediately after that I get this error:

Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "MSDASQL" for linked server "KSLAP208" reported an error. The provider reported an unexpected catastrophic failure.
Msg 7330, Level 16, State 2, Line 1
Cannot fetch a row from OLE DB provider "MSDASQL" for linked server "KSLAP208".

What am I doing wrong? Why Can I not select? I am able to see all the databases and tables on the linnked server.

if I select a small amount of data select field1,field2 it works without problems.

4

3 に答える 3

14

postgresqlリンクサーバーを作成したときにこれが問題だったことを覚えていると思います。これをfalseに設定してリンクサーバーを再作成する必要があると思います(または、リンクサーバーのプロパティ->サーバーオプションで変更するだけです)。

EXEC master.dbo.sp_serveroption @server=N'KSLAP208', 
    @optname=N'remote proc transaction promotion', @optvalue=N'false'

さらに、OPENQUERYリンクに対してこれを実行するためにを使用してみてください

SELECT * 
FROM OPENQUERY(KSLAP208,'SELECT * FROM PA_Profile_BASE_1119');
于 2013-02-08T18:57:25.727 に答える
2

リモート テーブルにアクセスするときは、完全な 4 部構成の命名が必要です。これを試して:

select * from [KSLAP208].[C003].dbo.PA_Profile_BASE_1119 

その理由を調べたことはありません。すべてのパーツを含めるのが習慣になりました。

次を使用して、列のリストを取得できます。

select column_name
from [KSLAP208].[C003].INFORMATION_SCHEMA.COLUMNS
where table_name = 'PA_Profile_BASE_1119'

(およびschema_name =必要に応じて何でも)。

于 2013-02-08T18:47:19.517 に答える
1

理由はわかりませんが、次のように試すことができます。

--link server and login
EXEC master.sys.sp_addlinkedserver N'KSLAP208',N'SQL Server';
EXEC master.sys.sp_addlinkedsrvlogin @rmtsrvname='KSLAP208', 
                  @useself='false',
                  @rmtuser='username',
                  @rmtpassword='password';

        --DO YOUR JOB HERE 
        SELECT  TOP (10) * FROM  [KSLAP208].dbName.dbo.[tableName]

--drop server link and login
EXEC sp_droplinkedsrvlogin 'KSLAP208', NULL
EXEC sp_dropserver 'KSLAP208', NULL;
于 2013-02-08T18:47:50.640 に答える