PowerShellissä käytän funktiota foreach
toiminnon suorittamiseen kohdeluettelon läpi.
Mietin, että jos sql: ssä on jotain, joka on samanlainen kuin foreach
, niin voin suorittaa saman kyselyn useiden valitsemieni tietokantojen kautta ja tallentaa tulokset yhteen csv-tiedostoon?
Kommentit
- Se, mitä teet, voidaan tehdä myös PowerShellissä. Miksi siis käyttää tsql: tä ja sitten sijoittaa csv-tiedostoon?
- Yritin saada vähemmän osapuolia, jos pystyisin tekemään sen vain yhdestä lähteestä.
Vastaa
Kuten Kin mainitsi, vaikka voit tehdä tämän T-SQL: ssä, PowerShell on edelleen elinkelpoinen ja mahdollisesti paljon helpompaa, varsinkin kun hyödynnät dbatools .
Voit käyttää Get-DbaDatabase
tietokantojen lisäksi myös suodattaa helposti ongelmalliset tietokannat, joita et todennäköisesti halua suorittaa (järjestelmän dbs, offline dbs jne.):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Ja aja sitten Invoke-DbaQuery
suorittaaksesi komennon kaikkia palautettuja tietokantoja vastaan.
Kommentit
- Tämä on hieno! Minun on todella päästävä junaan dbaTools.io. Toivottavasti pian!
- Päätän
foreah ($db in $dbs ) {invoke-sqlcmd......}
Vastaa
Ehdottomasti. Meillä on ehdottomasti FOR-silmukoita.
https://www.techonthenet.com/sql_server/loops/for_loop.php
site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Siellä on myös ”FOREACHDB” -toiminto ja jopa foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Mutta melko monta artikkelia siitä, miksi se (foreachdb) voi olla epäluotettava.
Tässä ”Aaron Bertrandin versio, joka on paljon parempi: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Tämä on suora linkki. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/