ciclo foreach negli script sql?

In PowerShell utilizzo foreach per eseguire una funzione attraverso un elenco di target.

Mi chiedevo se esiste qualcosa di simile a foreach in sql, quindi posso eseguire la stessa query su più DB che ho scelto e salvare i risultati in un file csv?

Commenti

  • Ciò che stai facendo può essere fatto anche in PowerShell. Allora perché usare tsql e poi eseguire il dump in un file csv?
  • Stavo cercando di coinvolgere meno parti se potessi farlo da una sola fonte.

Answer

Come menzionato da Kin, anche se puoi farlo in T-SQL, PowerShell è ancora praticabile e potenzialmente molto più semplice, specialmente quando utilizzi dbatools .

Puoi utilizzare Get-DbaDatabase non solo per ottenere i database, ma anche per filtrare facilmente quelli problematici su cui probabilmente non si desidera eseguire (database di sistema, database offline, ecc.):

Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible 

Quindi esegui Invoke-DbaQuery per eseguire il comando su ciascuno dei database restituiti.

Commenti

  • È fantastico! Ho davvero bisogno di salire sul treno dbaTools.io. Spero presto!
  • Finisco con foreah ($db in $dbs ) {invoke-sqlcmd......}

Risposta

Assolutamente. Abbiamo sicuramente i cicli FOR.

https://www.techonthenet.com/sql_server/loops/for_loop.php

Dal site:

DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END; 

Cè anche una funzionalità “FOREACHDB” e persino 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

Ma alcuni articoli sul motivo per cui (foreachdb) potrebbe essere inaffidabile.

Ecco un Aaron Versione Bertrand, che è molto meglio: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

Questo è il link diretto. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *