Попытка вызвать хранимую процедуру T-SQL, которая выбирает данные со связанного сервера в пакете служб SSIS. - PullRequest
10 голосов
/ 08 ноября 2011

У меня есть сценарий, в котором я пытаюсь выбрать некоторые данные в таблице t1 & t2 с удаленного Сервера (на который у меня только что есть разрешения на чтение) S1 в БД db1 с другого удаленного Сервера (на котором я DBO, но не действительно есть все разрешения, чтобы я мог делать все, что захочу) S2 в БД db2 в таблицу t1 через пакет служб SSIS.

S1 и S2 оба являются связанными серверами. Я связался с S1 с S2 через объектный сервер в SSMS.

Теперь я создал хранимую процедуру sp1 в S2.db2, в которой есть несколько операторов выбора из двух разных таблиц с объединением для диапазона дат, которые передаются в качестве параметров в sp1.

The input parameters for SP

например, как показано ниже:

SELECT * из s1.db1.schema1.t1 ЛЕВОЕ СОЕДИНЕНИЕ s1.db1.schema1.t2 ПРИ УСЛОВИИ] ГДЕ [УСЛОВИЯ] Теперь в моем пакете служб SSIS есть задача «Поток данных» с источником OLE DB и пунктом назначения со строкой подключения к s2.db2

В исходном коде я вызываю вышеупомянутый запрос в команде SQL напрямую и заполняю таблицу назначения, которая называется S2.db2.t1, и она работает нормально

Passing the query directly

Но выдает ошибку, когда я пытаюсь сделать следующее

  1. Создать 2 переменные DATETIME уровня пакета как v1, v2 и передать по умолчанию значения - без проблем
  2. В ИСТОЧНИКЕ ИСТОЧНИКА OLE DB -> СТРОКА СОЕДИНЕНИЯ -> КОМАНДА SQL -> EXEC sp1?,? - Нет проблем
  3. нажмите на вкладку ПАРАМЕТРЫ и выберите пользовательские параметры для параметра 0 и параметра 1 - без проблем
  4. Теперь, когда я говорю «ОК» для окна «КОМАНДА SQL», выдается сообщение об ошибке следующим образом

Error while calling the SP

Ошибка:

НАЗВАНИЕ: Microsoft Visual Studio

Ошибка в FII54_CBI_TM51 [FII54_CBI 1 ]: код ошибки SSIS DTS_E_OLEDBERROR. Произошла ошибка OLE DB. Код ошибки: 0x80004005. Доступна запись OLE DB. Источник: «Собственный клиент Microsoft SQL Server 10.0». Результат: 0x80004005 Описание: «Столкновение типа операнда: int несовместимо с датой».

Ошибка в FII54_CBI_TM51 [FII54_CBI 1 ]: невозможно получить информацию о столбце из источника данных. Убедитесь, что ваша целевая таблица в базе данных доступна.


ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Исключение из HRESULT: 0xC020204A (Microsoft.SqlServer.DTSPipelineWrap)


КНОПКА:

OK

Я понимаю, что означает ошибка, но я не понимаю, почему она вообще выдает эту ошибку.

Я ценю, если кто-то может помочь мне решить эту проблему? Это довольно срочно для меня.

1 Ответ

2 голосов
/ 19 ноября 2011

При использовании хранимой процедуры в качестве источника OLEDB вы должны убедиться, что внутри хранимой процедуры у вас есть:

SET NOCOUNT ON;

и затем перед выполнением процедуры добавьте: SET FMTONLY OFF

SET FMTONLY OFF;
EXEC CBI_MASTER_PID ?, ?

Вы можете попробовать это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...