Катастрофический отказ, пытающийся выбрать из связанного сервера
Я создал связанное соединение oledb/odbc с Pervasive SQL от 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
Тестовое соединение успешно.
Однако, когда я пытаюсь выбрать из базы данных:
select * from [KSLAP208].[C003]..PA_Profile_BASE_1119
Я сразу получаю только имена полей, и сразу же после этого я получаю эту ошибку:
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".
Что я делаю неправильно? Почему я не могу выбрать? Я могу видеть все базы данных и таблицы на linnked сервере.
, если я выбираю небольшое поле выбора данных1, поле2 работает без проблем.
Ответы
Ответ 1
Я думаю, что я помню, что это проблема, когда я создал связанный с 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');
Ответ 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 = что угодно, если вам это нужно).
Ответ 3
Не могу ответить, почему, но вы можете попробовать:
--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;