In Powershell verwende ich foreach
, um eine Funktion durch eine Liste von Zielen auszuführen.
Ich habe mich gefragt, ob es in SQL etwas Ähnliches wie foreach
gibt, damit ich dieselbe Abfrage über mehrere von mir ausgewählte DBs ausführen und die Ergebnisse in einer CSV-Datei speichern kann.
Kommentare
- Was Sie tun, können Sie auch in Powershell tun. Warum also tsql verwenden und dann in eine CSV-Datei kopieren?
- Ich habe versucht, weniger Parteien einzubeziehen, wenn ich dies nur aus einer Quelle tun könnte.
Antwort
Wie Kin bereits erwähnt hat, ist PowerShell zwar in T-SQL möglich, aber immer noch funktionsfähig und möglicherweise viel einfacher, insbesondere wenn Sie dbatools .
Get-DbaDatabase -Status "Normal" -ExcludeSystem -OnlyAccessible
Führen Sie dann Invoke-DbaQuery
aus, um Ihren Befehl für jede der zurückgegebenen Datenbanken auszuführen.
Kommentare
- Das ist großartig! Ich muss wirklich in den Zug dbaTools.io einsteigen. Hoffentlich bald!
- Am Ende habe ich
foreah ($db in $dbs ) {invoke-sqlcmd......}
Antwort
Auf jeden Fall. Wir haben definitiv FOR-Schleifen.
https://www.techonthenet.com/sql_server/loops/for_loop.php
Aus dem site:
DECLARE @cnt INT = 0; WHILE @cnt < cnt_total BEGIN {...statements...} SET @cnt = @cnt + 1; END;
Es gibt auch eine „FOREACHDB“ -Funktionalität und sogar foreachTable
https://www.sqlservercentral.com/Forums/Topic271576-5-1.aspx https://stackoverflow.com/questions/26496864/how-to-loop-through-all-sql-tables
Aber Einige Artikel darüber, warum es (foreachdb) unzuverlässig sein kann.
Hier ist ein Aaron Bertrand-Version, die viel besser ist: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448
Dies ist die direkte Verbindung. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/