/ / Получете списък на всички бази данни, които имат изглед с име "foo" в тях - sql, sql-server, ssis, sql-server-2012, ssis-2012

Получете списък на всички бази данни, които имат изглед, наречен "foo" в тях - sql, sql-server, ssis, sql-server-2012, ssis-2012

Имам няколко сървъра, които имат куп бази данни в тях. Някои от базите данни имат изглед, наречен vw_mydata.

Това, което искам да направя, е да създам списък с всичкибази данни, съдържащи изглед, наречена vw_mydata, и след това да изпълнят този изглед и да го съхранят в таблица, която съдържа всички данни от всички vw_mydata.

Знам, че мога да намеря всички бази данни, съдържащи този изглед

sp_msforeachdb "select "?" AS dbName from [?].sys.views where name like ""vw_mydata"""

Но тогава имам толкова много записи, колкото имам в базите данни. Как да го използвам, за да прескоча през базите данни?

Това, което бих предпочел, е един чист списък на базовите имена, които мога да съхранявам в резултат. Тогава би било доста просто.

Мислех си да бягам над TSQL исъхранявайки резултатите в таблица, но бих искал да ги запазя в един SSIS пакет и да не разполагам с всички видове таблици / процедури. Мога ли да използвам #table в Изпълнение на SQL задача в SSIS?

Отговори:

4 за отговор № 1
DECLARE @Tsql VARCHAR(MAX)
SET @Tsql = ""

SELECT @Tsql = @Tsql + "SELECT """ + d.name + """ AS dbName FROM [" + d.name + "].sys.views WHERE name LIKE ""vw_mydata"" UNION "
FROM master.sys.databases d

--"trim" the last UNION from the end of the tsql.
SET @Tsql = LEFT(@Tsql, LEN(@Tsql) - 6)

PRINT @Tsql

--Uncomment when ready to proceed
--EXEC (@Tsql)

2 за отговор № 2

За да използвате временна таблица в SSIS, ще трябва да използвате глобална временна таблица (##TABLE).

По отношение на свойствата на връзката, аз съм сигурен, че ще трябва да зададете RetainSameConnection да се TRUE.

В задачата SQL, след като създадете временната таблица, ще трябва да зададете DelayValidation да се TRUE.