Имам няколко сървъра, които имат куп бази данни в тях. Някои от базите данни имат изглед, наречен 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 за отговор № 1DECLARE @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
.