디렉토리에서 모든 SQL 파일 실행


117

SQL Server 2005 데이터베이스에서 다른 개발자가 변경 한 내용을 적용하기 위해 실행해야하는 .sql 파일이 많이 있습니다. 파일 이름은 다음 패턴에 따라 지정됩니다.

0001 - abc.sql
0002 - abcef.sql
0003 - abc.sql
...

한 번에 모두 실행할 수있는 방법이 있습니까?

답변:


143

다음 명령을 사용하여 .BAT 파일을 만듭니다.

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -E -i"%%G"
pause

사용자 이름과 암호를 제공해야하는 경우

for %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P 
password -i"%%G"

사용자 / 비밀번호가 제공되는 경우 "-E"는 필요하지 않습니다.

이 .BAT 파일을 .SQL 파일을 실행하려는 디렉토리에 넣고 .BAT 파일을 두 번 클릭하면 완료됩니다!


2
배치 파일을 실행할 때 "로그인에 실패했습니다. 로그인이 신뢰할 수없는 도메인에서 왔으며 Windows 인증과 함께 사용할 수 없습니다."라는 인증 문제가 발생합니다. 서버 이름 및 데이터베이스와 같이 사용자 이름과 암호를 제공하는 방법이 있습니까?
Sanjay Maharjan

11
: 같은 암호를 사용자와 -P에 대한 -U를 사용 @SanjayMaharjanfor %%G in (*.sql) do sqlcmd /S servername /d databaseName -U username -P "password" -i"%%G"
Rickedb

-o를 사용하여 출력을 별도의 파일에 어떻게 넣을 수 있습니까? -o temp.txt와 같이 사용할 때마다이 temp.txt를 덮어 씁니다. 동일한 SQL 파일 이름으로 출력 파일을 얻고 싶습니다.
케빈

@vijeth : 좋은 일하는 사람. 나는 약 200 개의 SQL 파일을 하나씩 수행하려고 생각하고있었습니다. 시간을 많이 저장
Uthistran Selvaraj

@Vijeth 감사합니다. 나는 나 자신을 위해 수정한다 : REM REM 개발 환경 만! (* .sql)에서 %% G에 대한 REM 일시 중지 do sqlcmd / S "192.168.10.139 \ SQLEXPRESS"/ d "TESTDEV_DB"-U "atiour"-P "atiour"-i "%% G"pause REM REM 모든 스크립트 성공적으로 REM 실행
atik sarker

71

FOR를 사용 하십시오 . 명령 프롬프트에서 :

c:\>for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f"

2
공백이 포함 된 스크립트를 사용하려면 마지막 "% f"주위에 따옴표를 추가해야했습니다.
Steve Wright

배치 파일에서 작동하는 버전은 이 답변을 참조하십시오 .
Ian Kemp

또한 다른 매개 변수를 추가해야했습니다 (예 : 인용 식별자를 사용하려면 / I)
Pavel K

나는 이것을 좋아하지만 결과를 파일로 출력하는 방법이 있습니까? 예외를 쉽게 볼 수 있습니까? 방금 136 개의 .sql 파일에 대해이 명령을 시도 했으므로 대부분의 가시성을 잃었습니다
Rich

2
@Rich 출력을 파일로 리디렉션하려면 다음 명령을 사용 하십시오. 여기for %f in (*.sql) do sqlcmd /S <servername> /d <dbname> /E /i "%f" >> sql.log 2>&1) 에서 출력 리디렉션에 대한 자세한 내용을 읽을 수 있습니다
danijelk

26
  1. SQL Management Studio에서 새 쿼리를 열고 아래와 같이 모든 파일을 입력합니다.

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  2. SQL Management Studio의 쿼리 메뉴로 이동하여 SQLCMD 모드가 활성화되어 있는지 확인합니다.
  3. SQLCMD 모드를 클릭하십시오. 파일은 아래와 같이 회색으로 선택됩니다.

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
  4. 이제 실행

3
수백 개의 파일이 있으면 정말 지루합니다.
데블린의 carnate

1
@devlincarnate : 아마도 1 단계를 자동화하는 방법을 생각해 낼 수있을 것입니다. "dir / B * .sql> list.txt"와 같이 그 다음 list.txt 파일을 약간 마사지하십시오.
Jeff Roe

최신 버전의 Windows에서 @devlincarnate를 사용하는 경우 Shift 키를 누른 상태에서 파일을 마우스 오른쪽 단추로 클릭하고 "경로로 복사"를 선택할 수 있습니다. 여기에서 CTRL + V를 눌러 SSMS 창으로 들어갑니다. 여러 파일에서도 작동합니다. 탐색기에서 두 개 이상의 파일을 선택하고 강조 표시된 파일을 마우스 오른쪽 버튼으로 클릭 한 다음 "경로로 복사"를 선택합니다. SSMS에서 단계를 반복합니다. 파일 경로는 큰 따옴표로 묶여 있으며 찾기 / 바꾸기를 사용하여 SSMS에서 제거 할 수도 있고 제거하지 않을 수도 있습니다.
Dave Mason

21

Management Studio에서 쿼리> SQLCMD 모드 옵션을 클릭하여 SQLCMD를 활성화했는지 확인합니다.

  1. script1.sql,script2.sql,script3.sql,script4.sql폴더에 4 개의 .sql 파일 ( ) 이 있다고 가정 합니다 c:\scripts.

  2. 다음을 사용하여 기본 스크립트 파일 (Main.sql)을 만듭니다.

    :r c:\Scripts\script1.sql
    :r c:\Scripts\script2.sql
    :r c:\Scripts\script3.sql
    :r c:\Scripts\script4.sql

    Main.sql을 c : \ scripts 자체에 저장합니다.

  3. ExecuteScripts.bat다음과 같은 이름의 배치 파일을 만듭니다 .

    SQLCMD -E -d<YourDatabaseName> -ic:\Scripts\Main.sql
    PAUSE

    <YourDatabaseName>스크립트를 실행하려는 데이터베이스 로 바꾸는 것을 잊지 마십시오. 예를 들어 데이터베이스가 "Employee"인 경우 명령은 다음과 같습니다.

    SQLCMD -E -dEmployee -ic:\Scripts\Main.sql
    PAUSE
  4. 동일한 파일을 두 번 클릭하여 배치 파일을 실행합니다.


내 대답을 편집했습니다. 또한 스크립트 파일이 지정된 경로에 있는지 확인해야합니다.
Ashish Gupta

이 접근 방식의 좋은 점은 오류가 발견되면 추가 스크립트 실행을 중지한다는 것입니다. -b예 :SQLCMD -b -i "file 1.sql","file 2.sql"
Jaider

이 접근 방식의 나쁜 점은 실행할 모든 SQL 파일 목록을 유지해야한다는 것입니다.
Francisco d' Anconia

10

ApexSQL Propagate를 사용할 수 있습니다 . 여러 데이터베이스에서 여러 스크립트를 실행하는 무료 도구입니다. 필요한만큼 스크립트를 선택하고 하나 또는 여러 데이터베이스 (여러 서버 포함)에 대해 실행할 수 있습니다. 스크립트 목록을 생성하고 저장 한 다음 생성 된 순서대로 동일한 스크립트를 실행할 때마다 해당 목록을 선택하기 만하면됩니다 (여러 스크립트 목록도 추가 할 수 있음).

스크립트 선택

스크립트와 데이터베이스를 선택하면 기본 창에 표시되며 "실행"버튼을 클릭하기 만하면 모든 스크립트가 선택한 데이터베이스에서 주어진 순서대로 실행됩니다.

스크립트 실행


8

일반 쿼리

아래 줄을 batch.bat 라는 이름으로 메모장에 저장하고 모든 스크립트 파일이있는 폴더 안에 넣습니다.

 for %%G in (*.sql) do sqlcmd /S servername /d databasename  -i"%%G"
    pause

(* .sql)의 %% G에 대해 sqlcmd / S NFGDDD23432 / d EMPLYEEDB -i "%% G"일시 중지

로그인에 실패한 경우 사용자 이름비밀번호 와 함께 아래 코드를 사용하십시오.

for %%G in (*.sql) do sqlcmd /S SERVERNAME /d DBNAME -U USERNAME -P PASSWORD -i"%%G"
pause

(* .sql)의 %% G에 대해 sqlcmd / S NE8148server / d EMPLYEEDB -U Scott -P tiger -i "%% G"일시 중지

스크립트 파일이있는 폴더 안에 bat 파일을 만든 후 bat 파일을 클릭하면 스크립트가 실행됩니다.


5

저는 많은 SQL 파일을 끌어다 놓고 데이터베이스에 대해 실행할 수 있는 오픈 소스 유틸리티 를 C #으로 작성했습니다.

이 유틸리티에는 다음과 같은 기능이 있습니다.

  • 드래그 앤 드롭 스크립트 파일
  • 스크립트 파일 디렉토리 실행
  • SQL 스크립트는 실행 중 넣기 메시지를 출력합니다.
  • 녹색 및 빨간색으로 표시된 스크립트 통과 또는 실패 (실행 중이면 노란색)
  • 오류시 중지 옵션
  • 오류시 스크립트 열기 옵션
  • 각 스크립트에 소요 된 시간으로 보고서 실행
  • 총 지속 시간
  • DB 연결 테스트
  • 비동기
  • .Net 4 및 SQL 2008로 테스트 됨
  • 단일 exe 파일
  • 언제든지 연결 끊기

4

내가 찾은 가장 쉬운 방법은 다음 단계를 포함했습니다 (유일한 요구 사항은 Win7 +에 있어야 함).

  • 탐색기에서 폴더 열기
  • 모든 스크립트 파일 선택
  • Shift 누르기
  • 선택 항목을 마우스 오른쪽 버튼으로 클릭하고 "경로로 복사"를 선택합니다.
  • SQL Server Management Studio로 이동
  • 새 쿼리 생성
  • 쿼리 메뉴, "SQLCMD 모드"
  • 목록을 붙여 넣은 다음 Ctrl + H를 누르고 ' "C : \'(또는 드라이브 문자)를 ': r"C :'로 바꿉니다 (예 : 줄 앞에 ': r'을 붙임).
  • 쿼리 실행

길게 들리지만 실제로는 매우 빠릅니다. (가장 작은 단계도 설명하는 한 오래 들립니다)



1
@echo off
cd C:\Program Files (x86)\MySQL\MySQL Workbench 6.0 CE

for %%a in (D:\abc\*.sql) do (
echo %%a
mysql --host=ip --port=3306 --user=uid--password=ped < %%a
)

1 단계 : 위의 줄은 메모장에 복사하여 bat로 저장합니다.

2 단계 : SQL Server에서 실행되는 쿼리의 모든 Sql 파일에있는 d 드라이브 abc 폴더.

3 단계 : IP, 사용자 ID 및 암호를 제공하십시오.


이 질문은 MySQL이 아닌 MSSQL과 관련이 있습니다.

0

다른 모든 스크립트를 호출하는 단일 스크립트를 만들 수 있습니다.

다음을 배치 파일에 넣으십시오.

@echo off
echo.>"%~dp0all.sql"
for %%i in ("%~dp0"*.sql) do echo @"%%~fi" >> "%~dp0all.sql"

해당 배치 파일을 실행하면 배치 파일이 all.sql있는 동일한 디렉토리에 이름이 지정된 새 스크립트가 생성됩니다 . .sql배치 파일이있는 동일한 디렉토리에서 확장자 를 가진 모든 파일을 찾습니다 .

그런 다음을 사용하여 모든 스크립트를 실행할 수 있습니다 sqlplus user/pwd @all.sql(또는 스크립트를 sqlplus만든 후 호출 할 배치 파일을 확장 all.sql).


0

동일한 디렉토리에서 모든 SQL 파일을 실행하려면 다음 명령을 사용하십시오.

ls | awk '{print "@"$0}' > all.sql

이 명령은 디렉토리의 모든 SQL 파일 이름에 "@"가 추가 된 단일 SQL 파일을 만듭니다.

all.sql생성 한 후 all.sqlSQLPlus로 간단히 실행 하면 all.sql.


0

대화식 SQL을 사용할 수있는 경우 :

1-다음 코드로 .BAT 파일을 만듭니다.

@ECHO OFF ECHO
for %%G in (*.sql) do dbisql -c "uid=dba;pwd=XXXXXXXX;ServerName=INSERT-DB-NAME-HERE" %%G
pause

2-암호 및 ServerName을 변경합니다.

3-.BAT 파일을 .SQL 파일이 포함 된 폴더에 넣고 실행합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.