Mam przechowywany proc jako tekst polecenia SQL, który jest przekazywany do parametru zawierającego nazwę tabeli. Proces zwraca dane z tej tabeli. Nie mogę wywołać tabeli bezpośrednio jako źródło OLE DB, ponieważ pewna logika biznesowa musi się zdarzyć z zestawem wynikowym w proc. W SQL 2008 wszystko działało dobrze. W uaktualnionym pakiecie 2012 otrzymuję komunikat "Nie można ustalić metadanych, ponieważ ... zawiera dynamiczny SQL. Rozważ użycie klauzuli WITH RESULT SETS, aby jawnie opisać zestaw wyników."Używanie dynamicznego SQL w źródle OLE DB w SSIS 2012
Problem polega na tym, że nie mogę zdefiniować nazw pól w proc, ponieważ nazwa tabeli przekazywana jako parametr może być inną wartością, a pola wynikowe mogą być za każdym razem inne. Ktoś napotyka ten problem lub ma jakieś pomysły? Próbowałem różnych rzeczy z dynamicznym SQL używając "dm_exec_describe_first_result_set", tabel tymczasowych i CTE, które zawiera Z ZESTAWEM WYNIKÓW, ale nie działa w SSIS 2012, ten sam błąd. Kontekst jest problemem z wieloma dynamicznymi podejściami SQL.
Jest to najnowszy rzeczą próbowałem, bez powodzenia:
DECLARE @sql VARCHAR(MAX)
SET @sql = 'SELECT * FROM ' + @dataTableName
DECLARE @listStr VARCHAR(MAX)
SELECT @listStr = COALESCE(@listStr +',','') + [name] + ' ' + system_type_name FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 1)
exec('exec(''SELECT * FROM myDataTable'') WITH RESULT SETS ((' + @listStr + '))')
Co jeśli spróbowałeś 'SET FMTONLY OFF; EXEC MyProc' w Twoim źródle OLEDB. Czy to jest lepsze? – billinkc
Próbowałem, ale to nie działa. SSIS potrzebuje metadanych. – jdf35
Bummer. Gdyby ta sztuczka działała dla przyjaciela zajmującego się tymczasowymi tabelami, kiedy przeprowadzali się w latach 2008-2012. – billinkc