bucla foreach în scripturile sql?

Î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.mssqltips.com/sqlservertip/1414/run-same-command-on-all-sql-server-databases-without-cursors/

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/

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *