Попытка вызова хранимой процедуры T-SQL, которая выбирает данные со связанного сервера в пакете SSIS

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

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

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

The input parameters for SP

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

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

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

Passing the query directly

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

  • Создайте переменные DATETIME уровня 2 в качестве v1, v2 и передайте по умолчанию значения - Нет проблем
  • В OLE DB SOURCE- > CONNECTION STRING → SQL COMMAND → EXEC sp1?,? - Нет проблем
  • перейдите на вкладку ПАРАМЕТРЫ и выберите оба параметра пользователя для параметра Parameter0 и parameter1 - без проблем
  • Теперь, когда я говорю ok для окна SQL COMMAND, он дает мне ошибку следующим образом

Error while calling the SP

Ошибка:

TITLE: Microsoft Visual Studio

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

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


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

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


КНОПКИ:

OK

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

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

Ответ 1

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

SET NOCOUNT ON;

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

SET FMTONLY OFF;
EXEC CBI_MASTER_PID ?, ?

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