În powershell folosesc foreach
pentru a rula o funcție printr-o listă de ținte.
Mă întrebam dacă există ceva similar cu foreach
în sql, așa că pot rula aceeași interogare prin mai multe DB-uri pe care le-am ales și pot salva rezultatele într-un fișier CSV?
Comentarii
- Ceea ce faceți se poate face și în PowerShell. Deci, de ce să folosesc tsql și apoi să arunc într-un fișier CSV?
- Încercam să am mai puține părți implicate dacă puteam să o fac dintr-o singură sursă.
Răspuns
Așa cum a menționat Kin, în timp ce puteți face acest lucru în T-SQL, PowerShell este încă viabil și potențial mult mai ușor, mai ales atunci când utilizați dbatools .
Puteți utiliza Get-DbaDatabase
pentru a obține nu numai bazele de date, ci și pentru a le filtra cu ușurință pe cele problematice pe care probabil nu doriți să le executați (sistem de sisteme, sisteme offline, etc.):
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Și apoi executați Invoke-DbaQuery
pentru a rula comanda împotriva fiecărei baze de date returnate.
Comentarii
- Este grozav! Trebuie să urc în trenul dbaTools.io. Sperăm că în curând!
- Am terminat cu
foreah ($db in $dbs ) {invoke-sqlcmd......}
Răspuns
Absolut. Cu siguranță avem bucle FOR.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Din site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Există, de asemenea, o funcționalitate „FOREACHDB” și chiar foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Dar destul de multe articole despre motivul pentru care (foreachdb) poate fi nesigur.
Iată un Aaron Versiunea Bertrand, care este mult mai bună: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Acesta este linkul direct. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/