W PowerShell używam foreach
, aby uruchomić funkcję na liście celów.
Zastanawiałem się, czy jest coś podobnego do foreach
w sql, więc mogę uruchomić to samo zapytanie za pośrednictwem wielu wybranych baz danych i zapisać wyniki w jednym pliku csv?
Komentarze
- To, co robisz, można również wykonać w programie PowerShell. Po co więc używać tsql, a następnie wrzucać do pliku csv?
- Próbowałem zaangażować mniej osób, jeśli mogę to zrobić tylko z jednego źródła.
Odpowiedz
Jak wspomniałem Kin, chociaż możesz to zrobić w T-SQL, PowerShell jest nadal opłacalny i potencjalnie dużo łatwiejszy, zwłaszcza gdy używasz dbatools .
Możesz użyć Get-DbaDatabase
aby nie tylko pobrać bazy danych, ale także łatwo odfiltrować te problematyczne, przeciwko którym prawdopodobnie nie chcesz wykonywać (systemowe bazy danych, bazy danych offline itp.):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Następnie uruchom Invoke-DbaQuery
, aby wykonać polecenie dla każdej zwróconej bazy danych.
Komentarze
- To świetnie! Naprawdę muszę wsiąść do pociągu dbaTools.io. Mam nadzieję, że niedługo!
- Skończy się na
foreah ($db in $dbs ) {invoke-sqlcmd......}
Odpowiedz
Oczywiście. Zdecydowanie mamy pętle FOR.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Z site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Dostępna jest również funkcja „FOREACHDB”, a nawet tabela foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Ale sporo artykułów na temat tego, dlaczego (foreachdb) może być zawodne.
Oto Aaron Wersja Bertranda, która jest znacznie lepsza: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
To jest bezpośredni link. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/