SSIS Доступна запись OLE DB. Источник: «Microsoft SQL Server Native Client 11.0» Hresult: 0x80004005, Метаданные не могут быть определены - PullRequest
3 голосов
/ 22 февраля 2020

Я получаю следующую ошибку, хотя я дал с набором результатов динамический c SQL. Тем не менее, он просит то же самое.

Доступна запись OLE DB. Источник: «Microsoft SQL Собственный клиент сервера 11.0» Hresult: 0x80004005 Описание: «Не удалось определить метаданные, так как оператор« EXE C sp_execute sql @ Exe cSQL »содержит Dynami c SQL. Рассмотрите возможность использования предложения WITH RESULT SETS для явного описания результирующего набора. ".

Ошибка: 0xC0202080 при входном файле Файл CSV - поток, команда OLE DB 1 [281]: невозможно получить описания столбцов назначения из параметров команды SQL.

Приведенный ниже код отлично работает в MS SQL Management Studio Query. Но это дает ошибку в SSIS

DECLARE @tablename nvarchar(200),  @tablevalue nvarchar(1)

SELECT @tablename =CAST(FLOOR(RAND()*(100000-5+1)+5) as nvarchar)

Select @tablevalue='0'

DECLARE   @ExecSQL NVARCHAR(max)

SET @ExecSQL = 'SELECT d.tablename, d.tablevalue INTO mws_ssis_cust_senti_integration'+ @tablename+
+ ' from  ( select ''' + 'mws_ssis_cust_senti_integration' + @tablename + ''' as tablename, ''' + @tablevalue + ''' as tablevalue ) as d '


EXEC sp_executesql @ExecSQL

Set @tablename = N'mws_ssis_cust_senti_integration'+ cast(@tablename as nvarchar)

Set  @ExecSQL = 'select * from  ' + @tablename

EXEC sp_executesql @ExecSQL
WITH RESULT SETS
(
 (
 tablename varchar(max), tablevalue varchar(1)
 )
)

Ответы [ 2 ]

3 голосов
/ 25 февраля 2020

Почему вы должны использовать эту команду в команде OLE DB?!

Ссылаясь на официальную документацию:

Преобразование команды OLE DB выполняет оператор SQL для каждого строка в потоке данных. Например, вы можете запустить оператор SQL, который вставляет, обновляет или удаляет строки в таблице базы данных.

Он не используется для операторов выбора. Я думаю, что вы ищете Выполнить SQL Задача или Источник OLE DB с SQL Режим доступа к команде или Преобразование поиска .

1- Выполнить SQL Задание

Результат запроса можно сохранить в переменной SSIS типа object. Существует множество статей, иллюстрирующих этот процесс:

Обратите внимание, что если у вас есть переменные @tablename и @tablevalue в SSIS, вы можете использовать выражения для создания этого оператора более простым способом и чтобы выполнить его позже.

2 - Источник OLE DB

Вы можете сгенерировать строки из аналогичной команды, используя Источник OLE DB, вы можете проверить следующий ответ, поскольку он предоставляет некоторую полезную информацию об использовании набора результатов в источнике OLE DB:

Также, вы можете проверить следующую статью для получения некоторой полезной информации:

3 - преобразование поиска

Я не уверен если он поддерживает сими Вы можете получить дополнительную информацию об этом компоненте по следующим ссылкам:

0 голосов
/ 25 февраля 2020

Вы пытались обернуть весь оператор внутри хранимой процедуры, а затем вызывать эту хранимую процедуру из служб SSIS?

Чистый выстрел в темноте, но в прошлом, когда я перемещал сложные операторы sql, особенно те, которые связаны с созданием временных таблиц вне SSMS в производственной среде (например, внутри приложения или отчета ssrs), запросы не будут выполняться без явной причины. Как только я переместил фактический sql в sp, ошибки волшебным образом исчезли с 0 изменениями действительной механики запроса.

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