216.73.216.97 TODAY : 158

기술문서

 > 

MS SQL Server

MSSQL 데이터베이스에서 여러 데이터베이스에 일괄적인 쿼리를 실행하는 방법

MSSQL 데이터베이스에서 여러 데이터베이스에 일괄적인 쿼리를 실행하는 방법
평점 10.0 라이센스 free
사용자평점 10.0 운영체제
다운로드 1 파일크기 0
제작사 LUZENSOFT 등록일 2025-08-16 18:10:03
조회수 12
- 설명

MSSQL 데이터베이스에서 여러 데이터베이스에 일괄적인 쿼리를 실행하는 방법




데이터베이스 10개를 한 번에 조회하려면 SQL Server의 시스템 저장 프로시저인 **sp_MSforeachdb**를 사용해야 합니다. 이 프로시저는 모든 데이터베이스를 순회하며 지정된 명령어를 실행합니다.


sp_MSforeachdb 사용 방법

uploadImage

sp_MSforeachdb를 사용하면 각 데이터베이스에 대한 쿼리를 반복적으로 실행할 수 있습니다. 가장 기본적인 사용법은 다음과 같습니다.

SQL

EXEC sp_MSforeachdb 'USE ?; SELECT DB_NAME() AS DatabaseName, COUNT(*) AS RowCount FROM MyTable';


위 쿼리는 각 데이터베이스에서 MyTable의 행 수를 조회합니다. ?는 현재 순회 중인 데이터베이스의 이름으로 자동 치환됩니다.



여러 쿼리 실행 방법


하나의 쿼리만 실행하는 것이 아니라, 여러 개의 복잡한 쿼리를 실행하려면 다음과 같이 작성할 수 있습니다.

SQL

EXEC sp_MSforeachdb '
    USE ?;

    -- 특정 데이터베이스에서만 실행
    IF ''?'' IN (''Database1'', ''Database2'', ''Database3'')
    BEGIN
        SELECT
            DB_NAME() AS DatabaseName,
            t.name AS TableName,
            c.name AS ColumnName
        FROM
            sys.tables AS t
        INNER JOIN
            sys.columns AS c ON t.object_id = c.object_id
        WHERE
            t.name = ''YourTableName'';
    END
';

이 방법은 스키마 구조가 동일한 여러 데이터베이스를 대상으로 반복적인 작업을 수행할 때 매우 유용합니다.



sp_MSforeachdb를 사용해 여러 데이터베이스를 대상으로 UPDATE 쿼리를 실행하는 것도 가능합니다.

이 방법은 여러 데이터베이스에 걸쳐 동일한 테이블의 데이터를 일괄적으로 수정해야 할 때 매우 유용합니다. 하지만 이 작업은 신중하게 수행해야 하며, 실행하기 전에 반드시 백업을 해두는 것이 좋습니다.



UPDATE 쿼리 사용 예시

uploadImage

SQL

EXEC sp_MSforeachdb '
    USE ?;

    -- 특정 데이터베이스에서만 실행
    IF ''?'' IN (''SalesDB'', ''CustomerDB'')
    BEGIN
        -- MyTable의 status 컬럼을 "Completed"로 업데이트
        UPDATE MyTable
        SET status = ''Completed''
        WHERE some_column = ''2025-01-01'';

        -- 업데이트된 행의 개수 확인
        PRINT ''Database: '' + DB_NAME() + '', Rows updated: '' + CAST(@@ROWCOUNT AS VARCHAR);
    END
';

위 예시 코드는 'SalesDB'와 'CustomerDB' 데이터베이스에 있는 MyTablestatus 컬럼을 일괄적으로 업데이트합니다. @@ROWCOUNT를 사용하면 각 데이터베이스에서 몇 개의 행이 업데이트되었는지 확인할 수 있어 유용합니다.



주의 사항


  • 트랜잭션: sp_MSforeachdb 내부의 각 명령은 별도의 트랜잭션으로 처리될 수 있습니다. 여러 데이터베이스에 걸쳐 단일 트랜잭션을 보장하려면 별도의 트랜잭션 로직을 추가해야 합니다.

  • 성능: 많은 데이터베이스를 대상으로 복잡한 쿼리를 실행하면 상당한 시간이 소요될 수 있습니다.

  • 에러 핸들링: 중간에 오류가 발생하면 다른 데이터베이스의 작업은 계속 진행될 수 있으므로, 에러 핸들링 로직을 추가하여 작업의 일관성을 유지하는 것이 중요합니다.



루젠VPN, #VPN추천 끝판왕! #멀티IP와 강력한 #API 지원으로 비즈니스 맞춤 최적화. 

안정적이고 빠른 속도로 제한 없이 자유로운 #인터넷 경험을 선사합니다. 지금 바로 루젠VPN을 경험하세요!

https://vpn.luzensoft.com