SQLスクリプトのforeachループ?

PowerShellでは、foreachを使用してターゲットのリストから関数を実行します。

SQLにforeachに似たものがあるので、選択した複数のDBで同じクエリを実行し、結果を1つのcsvファイルに保存できるかどうか疑問に思いました。

コメント

  • 実行していることはPowerShellでも実行できます。では、なぜtsqlを使用してからcsvファイルにダンプするのでしょうか?
  • 1つのソースからのみ実行できるのであれば、関係者を少なくしようとしていました。

回答

Kinが述べたように、これはT-SQLで実行できますが、PowerShellは実行可能であり、特に dbatools

Get-DbaDatabase データベースを取得するだけでなく、実行したくない問題のあるデータベース(システムデータベース、オフラインデータベースなど)を簡単に除外するには:

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

次に、 Invoke-DbaQuery を実行して、返された各データベースに対してコマンドを実行します。

コメント

  • これはすばらしいことです。dbaTools.ioトレインに乗る必要があります。すぐにできればと思います!
  • 最終的にforeah ($db in $dbs ) {invoke-sqlcmd......}

回答

もちろんです。間違いなくFORループがあります。

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

サイト:

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

「FOREACHDB」機能もあり、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

しかし、なぜそれ(foreachdb)が信頼できないのかについてのかなりの数の記事。

ここにアーロンがありますベルトランバージョン。はるかに優れています: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

これは直接リンクです。 https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です