SQL 스크립트의 foreach 루프?

Powershell에서는 foreach를 사용하여 대상 목록을 통해 함수를 실행합니다.

SQL에 foreach와 유사한 것이 있다면 내가 선택한 여러 DB를 통해 동일한 쿼리를 실행하고 결과를 하나의 csv 파일에 저장할 수 있는지 궁금합니다.

댓글

  • 현재 수행중인 작업은 powershell에서도 수행 할 수 있습니다. 그렇다면 tsql을 사용하고 csv 파일에 덤프하는 이유는 무엇입니까?
  • 하나의 소스에서만 수행 할 수 있다면 관련 당사자를 줄이려고했습니다.

Answer

Kin이 언급했듯이 T-SQL에서이 작업을 수행 할 수 있지만 PowerShell은 여전히 실행 가능하고 잠재적으로 훨씬 더 쉽습니다. 특히 dbatools .

Get-DbaDatabase 데이터베이스를 가져올뿐만 아니라 실행하고 싶지 않은 문제가있는 데이터베이스 (시스템 DB, 오프라인 DB 등)도 쉽게 필터링 할 수 있습니다.

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

site :

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)가 신뢰할 수없는 이유에 대한 기사가 많이 있습니다.

여기에 Aaron이 있습니다. 훨씬 더 나은 Bertrand 버전 : https://github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit/issues/448

직접 링크입니다. https://www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다