I powershell bruger jeg foreach
til at køre en funktion gennem en liste over mål.
Jeg spekulerede på, at hvis der er noget, der ligner foreach
i sql, så jeg kan køre den samme forespørgsel gennem flere DBer, jeg valgte, og gemme resultaterne i en csv-fil?
Kommentarer
- Det, du laver, kan også gøres i powershell. Så hvorfor bruge tsql og derefter dumpe i en csv-fil?
- Jeg forsøgte at have færre involverede parter, hvis jeg kun kunne gøre det fra en kilde.
Svar
Som Kin nævnte, mens du kan gøre dette i T-SQL, er PowerShell stadig levedygtig og potentielt meget lettere, især når du udnytter dbatools .
Du kan bruge Get-DbaDatabase
for ikke kun at få databaserne, men også nemt at filtrere problematiske dem ud, som du sandsynligvis ikke vil udføre mod (system dbs, offline dbs osv.):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Og kør derefter Invoke-DbaQuery
for at køre din kommando mod hver af de returnerede databaser.
Kommentarer
- Dette er fantastisk! Jeg har virkelig brug for at komme på dbaTools.io-toget. Forhåbentlig snart!
- Jeg ender med
foreah ($db in $dbs ) {invoke-sqlcmd......}
Svar
Absolut. Vi har bestemt FOR-sløjfer.
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;
Der er også en “FOREACHDB” -funktionalitet og endda foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Men en hel del artikler om, hvorfor det (foreachdb) kan være upålideligt.
Her er en Aaron Bertrand-version, som er meget bedre: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Dette er det direkte link. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/