I powershell bruker jeg foreach
for å kjøre en funksjon gjennom en liste over mål.
Jeg lurte på at hvis det er noe som ligner på foreach
i sql, så kan jeg kjøre den samme forespørselen gjennom flere DB-er jeg valgte og lagre resultatene i en csv-fil?
Kommentarer
- Det du gjør kan også gjøres i powershell. Så hvorfor bruke tsql og deretter dumpe til en csv-fil?
- Jeg prøvde å ha færre involverte parter hvis jeg bare kunne gjøre det fra en kilde.
Svar
Som Kin nevnte, mens du kan gjøre dette i T-SQL, er PowerShell fortsatt levedyktig og potensielt mye lettere, spesielt når du utnytter dbatools .
Du kan bruke Get-DbaDatabase
for ikke bare å hente databasene, men også enkelt filtrere ut problematiske dem du sannsynligvis ikke vil utføre mot (system dbs, offline dbs, etc):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Kjør deretter Invoke-DbaQuery
for å kjøre kommandoen din mot hver av de returnerte databasene.
Kommentarer
- Dette er flott! Jeg trenger virkelig å komme meg på dbaTools.io-toget. Forhåpentligvis snart!
- Jeg ender opp med
foreah ($db in $dbs ) {invoke-sqlcmd......}
Svar
Absolutt. Vi har definitivt FOR-løkker.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Fra site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Det er også en «FOREACHDB» -funksjonalitet og til og med foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Men ganske mange artikler om hvorfor det (foreachdb) kan være upålitelig.
Her er en Aaron Bertrand-versjonen, som er mye bedre: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Dette er den direkte lenken. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/