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.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/