loop foreach em scripts sql?

No PowerShell, eu uso foreach para executar uma função por meio de uma lista de destinos.

Gostaria de saber se existe algo semelhante a foreach no sql, para que eu possa executar a mesma consulta por meio de vários bancos de dados que escolhi e salvar os resultados em um arquivo csv?

Comentários

  • O que você está fazendo também pode ser feito no PowerShell. Então por que usar tsql e depois despejar em um arquivo csv?
  • Eu estava tentando ter menos partes envolvidas se pudesse fazer isso de apenas uma fonte.

Resposta

Como o Kin mencionou, embora você possa fazer isso em T-SQL, o PowerShell ainda é viável e potencialmente muito mais fácil, especialmente quando você utiliza dbatools .

Você pode usar Get-DbaDatabase para não apenas obter os bancos de dados, mas também filtrar facilmente aqueles problemáticos nos quais você provavelmente não deseja executar (banco de dados do sistema, banco de dados offline, etc):

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

E então execute Invoke-DbaQuery para executar seu comando em cada um dos bancos de dados retornados.

Comentários

  • Isso é ótimo! Eu realmente preciso entrar no trem dbaTools.io. Espero que em breve!
  • Acabo com foreah ($db in $dbs ) {invoke-sqlcmd......}

Resposta

Absolutamente. Definitivamente, temos loops FOR.

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

Do site:

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

Há também uma funcionalidade “FOREACHDB” e até mesmo 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

Mas alguns artigos sobre por que (foreachdb) pode não ser confiável.

Aqui está um Aaron Versão Bertrand, que é muito melhor: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

Este é o link direto. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *