pętla foreach w skryptach sql?

W PowerShell używam foreach, aby uruchomić funkcję na liście celów.

Zastanawiałem się, czy jest coś podobnego do foreach w sql, więc mogę uruchomić to samo zapytanie za pośrednictwem wielu wybranych baz danych i zapisać wyniki w jednym pliku csv?

Komentarze

  • To, co robisz, można również wykonać w programie PowerShell. Po co więc używać tsql, a następnie wrzucać do pliku csv?
  • Próbowałem zaangażować mniej osób, jeśli mogę to zrobić tylko z jednego źródła.

Odpowiedz

Jak wspomniałem Kin, chociaż możesz to zrobić w T-SQL, PowerShell jest nadal opłacalny i potencjalnie dużo łatwiejszy, zwłaszcza gdy używasz dbatools .

Możesz użyć Get-DbaDatabase aby nie tylko pobrać bazy danych, ale także łatwo odfiltrować te problematyczne, przeciwko którym prawdopodobnie nie chcesz wykonywać (systemowe bazy danych, bazy danych offline itp.):

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

Następnie uruchom Invoke-DbaQuery , aby wykonać polecenie dla każdej zwróconej bazy danych.

Komentarze

  • To świetnie! Naprawdę muszę wsiąść do pociągu dbaTools.io. Mam nadzieję, że niedługo!
  • Skończy się na foreah ($db in $dbs ) {invoke-sqlcmd......}

Odpowiedz

Oczywiście. Zdecydowanie mamy pętle FOR.

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

Z site:

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

Dostępna jest również funkcja „FOREACHDB”, a nawet tabela 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

Ale sporo artykułów na temat tego, dlaczego (foreachdb) może być zawodne.

Oto Aaron Wersja Bertranda, która jest znacznie lepsza: https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

To jest bezpośredni link. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *