V prostředí PowerShell používám foreach
ke spuštění funkce prostřednictvím seznamu cílů.
Zajímalo by mě, jestli existuje něco podobného foreach
v sql, takže můžu spustit stejný dotaz přes více databází, které jsem vybral, a uložit výsledky do jednoho souboru csv?
Jak zmínil Kin, i když to můžete udělat v T-SQL, PowerShell je stále životaschopný a potenciálně mnohem jednodušší, zvláště když využijete dbatools .
Můžete použít
Get-DbaDatabase
nejen získat databáze, ale také snadno odfiltrovat problematické, proti kterým pravděpodobně nechcete spouštět (systémové dbs, offline dbs atd.):A poté spusťte
Invoke-DbaQuery
a spusťte příkaz proti každé vrácené databázi.Komentáře
foreah ($db in $dbs ) {invoke-sqlcmd......}
odpověď
Absolutně. Určitě máme smyčky FOR.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Z web:
K dispozici je také funkce „FOREACHDB“ a dokonce i foreachTable
https://www.mssqltips.com/sqlservertip/1414/run-same-command-on-all-sql-server-databases-without-cursors/
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Ale několik článků o tom, proč to (foreachdb) může být nespolehlivé.
Tady je Aaron Verze Bertrand, která je mnohem lepší: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Toto je přímý odkaz. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/