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

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

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

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

Входные параметры для SP

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

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

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

Передача запроса напрямую

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

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

Ошибка при вызове SP

Ошибка:

НАЗВАНИЕ: 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

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

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


person vineela    schedule 08.11.2011    source источник
comment
1) sp_help sp1 Отредактируйте свой тикет с информацией о параметрах, которые принимает процедура. 2) В источнике OLE DB сделайте снимок экрана с окном «Установить параметры запроса» (доступно, если щелкнуть «Параметры...»). 3) Снимите снимок экрана с окном «Переменные». 4) Можете ли вы создать фиктивный процесс sp2 в той же базе данных, что и sp1? Пусть он имеет ту же сигнатуру, что и sp1, но не запрашивает никаких таблиц и, конечно же, не затрагивает связанный сервер. Это поможет определить, связана ли проблема со связанным сервером, вашим запросом или пакетом.   -  person billinkc    schedule 08.11.2011
comment
Эй... Я действительно не понимаю необходимости шагов, которые вы предложили выше. Но переходя к последнему пункту, то есть к выявлению проблемы, я почти уверен, что проблема не в запросе или пакете. Я также не думаю, что проблема связана со связанным сервером, потому что, когда я пытаюсь вставить запрос связанного сервера, который находится внутри sp1, он работает просто отлично. Запрос также в порядке, потому что он работал как в пакете SSIS, так и в SSMS и то же самое с package. Я считаю, что это как-то связано с вызовом SP и связанных серверов вместе в пакете SSIS. Я никогда раньше не работал с этой комбинацией.   -  person vineela    schedule 08.11.2011
comment
Вы можете это знать, но мы, люди, пытающиеся дать возможные ответы на вашу проблему, не знаем этого. Похоже, что имеет место несоответствие типов данных, поэтому я попросил подробностей об интерфейсе между двумя системами. Наличие конкретных доказательств метаданных процедуры, сопоставления параметров и типов SSIS позволит людям, которые хотят помочь вам, увидеть подробности проблемы. Мы можем обнаружить, что это не несоответствие, но в конечном итоге проблема с разрешениями, но я бы предпочел устранить вероятные причины, прежде чем искать что-то неясное.   -  person billinkc    schedule 08.11.2011
comment
Попался!!! Но когда я пытаюсь прикрепить снимок экрана в качестве изображения, это дает мне следующую ошибку: Oops! Ваше изменение не может быть отправлено, потому что: К сожалению, в целях предотвращения спама новым пользователям не разрешается публиковать изображения. Заработайте более 10 репутации, чтобы публиковать изображения. Пожалуйста, дайте мне знать, есть ли другой способ сделать это.   -  person vineela    schedule 08.11.2011
comment
В ближайшее время у вас должна быть достаточная репутация, попросили некоторых людей проголосовать за вопрос.   -  person billinkc    schedule 08.11.2011
comment
Попробуйте заключить вопросительные знаки в одинарные кавычки и сообщите, как это было.   -  person gonsalu    schedule 12.11.2011


Ответы (1)


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

SET NOCOUNT ON;

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

SET FMTONLY OFF;
EXEC CBI_MASTER_PID ?, ?

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

person Nonym    schedule 18.11.2011