bucle foreach en scripts SQL?

En powershell, uso foreach para ejecutar una función a través de una lista de objetivos.

Me preguntaba si hay algo similar a foreach en sql, para poder ejecutar la misma consulta a través de varios DB que elegí y guardar los resultados en un archivo csv.

Comentarios

  • Lo que estás haciendo también se puede hacer en PowerShell. Entonces, ¿por qué usar tsql y luego volcarlo en un archivo csv?
  • Estaba tratando de tener menos partes involucradas si podía hacerlo desde una sola fuente.

Respuesta

Como mencionó Kin, aunque puede hacer esto en T-SQL, PowerShell sigue siendo viable y potencialmente mucho más fácil, especialmente cuando aprovecha dbatools .

Puede usar Get-DbaDatabase no solo para obtener las bases de datos, sino también para filtrar fácilmente aquellas problemáticas contra las que probablemente no desee ejecutar (dbs del sistema, dbs sin conexión, etc.):

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

Y luego ejecute Invoke-DbaQuery para ejecutar su comando en cada una de las bases de datos devueltas.

Comentarios

  • ¡Esto es genial! Realmente necesito subirme al tren dbaTools.io. ¡Ojalá pronto!
  • Termino con foreah ($db in $dbs ) {invoke-sqlcmd......}

Responder

Por supuesto. Definitivamente tenemos bucles FOR.

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

De la site:

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

También hay una funcionalidad «FOREACHDB» e incluso 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

Pero bastantes artículos sobre por qué (foreachdb) puede no ser confiable.

Aquí está un Aaron Versión de Bertrand, que es mucho mejor: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

Este es el enlace directo. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *