Usando
WITH RESULT SETS
definir explicitamente os metadados permitirá que o SSIS ignore o sp_describe_first_result_set
passo e use os metadados que você definir. A vantagem é que você pode usar isso para fazer o SSIS executar SQL que contém uma tabela temporária (para mim, esse desempenho ajudou muito); a desvantagem é que você precisa manter e atualizar manualmente isso se algo mudar. Exemplo de consulta (procedimento armazenado:)
EXEC ('dbo.MyStoredProcedure')
WITH RESULT SETS
(
(
MyIntegerColumn INT NOT NULL,
MyTextColumn VARCHAR(50) NULL,
MyOtherColumn BIT NULL
)
)
Exemplo de consulta (SQL simples:)
EXEC ('
CREATE TABLE #a
(
MyIntegerColumn INT NOT NULL,
MyTextColumn VARCHAR(50) NULL,
MyOtherColumn BIT NULL
)
INSERT INTO #a
(
MyIntegerColumn,
MyTextColumn,
MyOtherColumn
)
SELECT
1 AS MyIntegerColumn,
''x'' AS MyTextColumn,
0 AS MyOtherColumn
SELECT MyIntegerColumn, MyTextColumn, MyOtherColumn
FROM #a')
WITH RESULT SETS
(
(
MyIntegerColumn INT NOT NULL
,MyTextColumn VARCHAR(50) NULL
,MyOtherColumn BIT NULL
)
)