Я сделал два изменения в вашем образце и смог заставить его работать.
Первым было изменение типа параметра на строковое в задаче «Выполнение SQL».Я знаю, что это путеводитель, но поскольку в SSIS это строковая переменная, сохраните выравнивание типов данных и дайте бэкэнду rdbms / driver обработать преобразование.
Другой вещью, которую я изменил, был тип данных для DocData.Вы определили как Байт, но никогда не использовали это, я волнуюсь, что это один целый байт, а не байты.Во всяком случае, для таблицы, которую я создал, использование типа данных «Объект» для служб SSIS заставило его работать.
Исходный запрос
Вот моя таблица и одно значение в ней
IF NOT EXISTS
(
SELECT
*
FROM
sys.tables
WHERE
name = 'docsRepo'
)
BEGIN
CREATE TABLE dbo.docsRepo
(
DocumentGuid uniqueidentifier
, DocumentData varbinary(MAX)
);
INSERT INTO
dbo.docsRepo
SELECT
'53A394A7-5D2B-40C0-A04D-90553E4535C3'
, CAST('Hello world' AS varbinary(MAX));
END;
Запрос поиска
SELECT D.DocumentData FROM dbo.docsRepo AS D WHERE D.DocumentGuid = ?;
Настроен с полным набором результатов.Использовал драйвер OLE DB.Имя параметра 0, тип данных varchar, переменная User :: DocumentGuid.На вкладке результатов у меня есть имя набора результатов 0, переменная User :: DocumentData
Этот Biml создаст пакет служб SSIS, который демонстрирует все это
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<Connections>
<OleDbConnection Name="localhost" ConnectionString="Provider=SQLNCLI11;Integrated Security=SSPI;Data Source=.\dev2014;Initial Catalog=tempdb" />
</Connections>
<Packages>
<Package Name="SO_50028154" ConstraintMode="Linear">
<Variables>
<Variable Name="DocumentGuid" DataType="String">53A394A7-5D2B-40C0-A04D-90553E4535C3</Variable>
<Variable Name="DocumentData" DataType="Object" />
</Variables>
<Tasks>
<ExecuteSQL Name="SQL GenerateTable" ConnectionName="localhost">
<DirectInput>IF NOT EXISTS(SELECT * FROM sys.tables WHERE name='docsRepo')BEGIN CREATE TABLE dbo.docsRepo(DocumentGuid uniqueidentifier, DocumentData varbinary(max)); INSERT INTO dbo.docsRepo SELECT '53A394A7-5D2B-40C0-A04D-90553E4535C3', CAST('Hello world' AS varbinary(max)); END</DirectInput>
</ExecuteSQL>
<ExecuteSQL Name="SQL Retrieve data" ConnectionName="localhost" ResultSet="Full">
<DirectInput>SELECT D.DocumentData FROM dbo.docsRepo AS D WHERE D.DocumentGuid = ?;</DirectInput>
<Parameters>
<Parameter DataType="AnsiString" Name="0" VariableName="User.DocumentGuid" />
</Parameters>
<Results>
<Result Name="0" VariableName="User.DocumentData" />
</Results>
</ExecuteSQL>
</Tasks>
</Package>
</Packages>
</Biml>