In powershell gebruik ik foreach
om een functie door een lijst met doelen te laten lopen.
Ik vroeg me af of er iets is dat lijkt op foreach
in sql, zodat ik dezelfde zoekopdracht kan uitvoeren via meerdere DBs die ik heb gekozen en de resultaten kan opslaan in één csv-bestand?
Reacties
- Wat je doet kan ook in powershell worden gedaan. Dus waarom tsql gebruiken en dan in een csv-bestand dumpen?
- Ik probeerde om minder partijen te betrekken als ik het vanuit slechts één bron kon doen.
Answer
Zoals Kin al zei, hoewel je dit in T-SQL kunt doen, is PowerShell nog steeds levensvatbaar en mogelijk een stuk eenvoudiger, vooral wanneer je dbatools .
U kunt Get-DbaDatabase
om niet alleen de databases op te halen, maar ook gemakkelijk problematische databases eruit te filteren die u waarschijnlijk niet wilt uitvoeren (systeem-dbs, offline dbs, enz.):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
En voer vervolgens Invoke-DbaQuery
uit om uw opdracht uit te voeren voor elk van de geretourneerde databases.
Reacties
- Dit is geweldig! Ik moet echt op de dbaTools.io-trein stappen. Hopelijk snel!
- Ik eindig met
foreah ($db in $dbs ) {invoke-sqlcmd......}
Antwoord
Absoluut. We hebben zeker FOR-loops.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Van de site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Er is ook een “FOREACHDB” -functionaliteit en zelfs foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Maar nogal wat artikelen over waarom het (foreachdb) onbetrouwbaar kan zijn.
Hier is een Aaron Bertrand-versie, die veel beter is: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Dit is de directe link. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/