다음을 통해 공유


sqlcmd 유틸리티 사용

sqlcmd 유틸리티는 Transact-SQL 문 및 스크립트의 임시 대화형 실행 및 Transact-SQL 스크립팅 작업을 자동화하기 위한 명령줄 유틸리티입니다. sqlcmd을(를) 대화형으로 사용하거나 sqlcmd를 실행할 스크립트 파일을 작성하려면 사용자들이 Transact-SQL을 이해해야 합니다. 유틸리티 sqlcmd 는 일반적으로 다음과 같은 방법으로 사용됩니다.

  • 사용자는 명령 프롬프트에서 작업하는 것과 유사한 방식으로 Transact-SQL 문을 대화형으로 입력합니다. 결과는 명령 프롬프트에 표시됩니다. 명령 프롬프트 창을 열려면 시작을 클릭하고 모든 프로그램을 클릭하고 보조 프로그램을 가리킨 다음 명령 프롬프트를 클릭합니다. 명령 프롬프트에서 sqlcmd를 입력한 뒤 원하는 옵션을 입력합니다. 지원 sqlcmd되는 옵션의 전체 목록은 sqlcmd 유틸리티를 참조하세요.

  • 사용자는 단일 Transact-SQL 문을 실행하도록 지정하거나, 실행할 Transact-SQL 문이 포함된 텍스트 파일을 유틸리티에 지정하여 sqlcmd 작업을 제출합니다. 출력은 일반적으로 텍스트 파일로 전달되지만 명령 프롬프트에도 표시될 수 있습니다.

  • SQL Server Management Studio 쿼리 편집기에서 SQLCMD 모드입니다.

  • SQL Server 관리 개체(SMO)

  • SQL Server Agent CmdExec 작업입니다.

일반적으로 사용되는 sqlcmd 옵션

다음 옵션이 가장 자주 사용됩니다.

  • 연결할 Microsoft SQL Server sqlcmd 의 인스턴스를 식별하는 서버 옵션(-S)입니다.

  • SQL Server 인스턴스에 연결하는 데 사용하는 자격 증명 sqlcmd 을 지정하는 인증 옵션(-E, -U-P)입니다.

    비고

    -E 옵션은 기본값이며 지정할 필요가 없습니다.

  • 입력 위치를 sqlcmd식별하는 입력 옵션(-Q, -q-i)입니다.

  • 출력을 넣을 파일을 지정하는 sqlcmd 출력 옵션(-o)입니다.

sqlcmd 유틸리티에 연결

유틸리티의 sqlcmd 일반적인 용도는 다음과 같습니다.

  • Windows 인증을 사용하여 기본 인스턴스에 연결하여 Transact-SQL 문을 대화형으로 실행합니다.

    sqlcmd -S <ComputerName>  
    

    비고

    이전 예제에서 -E 는 기본값 sqlcmd 이며 Windows 인증을 사용하여 기본 인스턴스에 연결하기 때문에 지정되지 않았습니다.

  • Windows 인증을 사용하여 명명된 인스턴스에 연결하여 Transact-SQL 문을 대화형으로 실행합니다.

    sqlcmd -S <ComputerName>\<InstanceName>  
    

    또는

    sqlcmd -S .\<InstanceName>  
    
  • Windows 인증을 사용하여 명명된 인스턴스에 연결하고 입력 및 출력 파일을 지정합니다.

    sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>  
    
  • Windows 인증을 사용하여 로컬 컴퓨터의 기본 인스턴스에 연결하고 쿼리를 실행합니다. 쿼리 실행이 완료된 후에도 sqlcmd는 계속 실행됩니다.

    sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"  
    
  • Windows 인증을 사용하여 로컬 컴퓨터의 기본 인스턴스에 연결하고, 쿼리를 실행하고, 출력을 파일로 전달하고 sqlcmd , 쿼리 실행이 완료된 후 종료합니다.

    sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt  
    
  • SQL Server 인증을 사용하여 명명된 인스턴스에 연결한 후, sqlcmd가 암호를 묻는 메시지를 띄우면 Transact-SQL 문을 대화형으로 실행합니다.

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>  
    

    비고

    다음 명령어 sqlcmd -?을(를) 실행하여 sqlcmd 유틸리티에서 지원하는 옵션 목록을 확인하세요.

sqlcmd를 사용하여 대화형으로 Transact-SQL 문 실행

이 유틸리티를 sqlcmd 대화형으로 사용하여 명령 프롬프트 창에서 Transact-SQL 문을 실행할 수 있습니다. Transact-SQL 문을 대화형으로 실행하려면 sqlcmd를 사용하여, 입력 파일이나 쿼리를 지정하지 않고 -Q, -q, -Z, 또는 -i 옵션 없이 유틸리티를 실행하십시오. 다음은 그 예입니다.

sqlcmd -S <ComputerName>\<InstanceName>

명령이 입력 파일이나 쿼리 sqlcmd 없이 실행되면 SQL Server의 지정된 인스턴스에 연결한 후, 1> 뒤에 깜박이는 밑줄이 있으며 이는 sqlcmd 프롬프트로 나타나는 새 줄을 보여줍니다. 1는 Transact-SQL 문장의 첫 번째 줄이라는 뜻이며, sqlcmd 프롬프트는 Transact-SQL 문장이 입력 시 시작되는 지점입니다.

프롬프트에서 sqlcmd에서는 Transact-SQL 문과 sqlcmd 명령을 입력할 수 있으며, 예를 들어 GOEXIT와 같은 명령을 사용할 수 있습니다. 각 Transact-SQL 명령문은 명령문 캐시라는 버퍼에 저장됩니다. 이러한 문장은 GO 명령을 입력하고 Enter 키를 누른 후 SQL Server로 전송됩니다. 종료sqlcmd하려면 새 줄의 시작 부분에 EXIT 또는 QUIT을 입력하세요.

문 캐시를 지우려면 :RESET을 입력 합니다. ^C을(를) 입력하면 sqlcmd이(가) 종료됩니다. ^C 명령을 실행한 후 GO 문 캐시 실행을 중지하는 데 사용할 수도 있습니다.

대화형 세션에 입력된 Transact-SQL 문은 :ED 명령과 sqlcmd 프롬프트를 통해 편집할 수 있습니다. 편집기가 열리고 Transact-SQL 문을 편집하고 편집기를 닫은 후 수정된 Transact-SQL 문이 명령 창에 나타납니다. GO을 입력하여 개정된 Transact-SQL 명령문을 실행합니다.

따옴표 붙은 문자열

따옴표 두 개를 연속으로 입력하여 문자열 내에 따옴표를 삽입하는 예외적인 경우를 제외하고 따옴표로 묶인 문자는 추가적인 전처리 없이 사용됩니다. SQL Server에서는 이러한 문자 시퀀스를 하나의 따옴표로 처리합니다. (그러나 변환은 서버에서 발생합니다.) 스크립팅 변수는 문자열 내에 표시될 때 확장되지 않습니다.

다음은 그 예입니다.

sqlcmd

PRINT "Length: 5"" 7'";

GO

결과 집합은 다음과 같습니다.

Length: 5" 7'

여러 줄에 걸쳐 있는 문자열

sqlcmd 는 여러 줄에 걸쳐 있는 문자열이 있는 스크립트를 지원합니다. 예를 들어 다음 SELECT 문은 여러 줄에 걸쳐 있지만 입력 후 ENTER 키를 누를 때 실행되는 단일 문자열입니다 GO.

SELECT First line

FROM Second line

WHERE Third line;

GO

대화형 sqlcmd 예제

대화형으로 실행할 sqlcmd 때 표시되는 내용의 예입니다.

명령 프롬프트 창을 열면 다음과 비슷한 한 줄이 있습니다.

C:\> _

즉, 폴더 C:\ 가 현재 폴더이고 파일 이름을 지정하면 Windows에서 해당 폴더의 파일을 찾습니다.

로컬 컴퓨터에서 SQL Server의 기본 인스턴스에 연결하려면 입력 sqlcmd 하고 명령 프롬프트 창의 내용은 다음과 같습니다.

C:\>sqlcmd

1> _

즉, SQL Server 인스턴스에 연결했으며 sqlcmd 이제 Transact-SQL 문 및 sqlcmd 명령을 수락할 준비가 되었습니다. 그 뒤의 1> 깜박이는 밑줄은 입력한 문과 명령이 표시되는 위치를 표시하는 프롬프트입니다 sqlcmd . 이제 Enter 키를 입력 USE AdventureWorks2012 하고 누른 다음 Enter 키를 입력 GO 하고 누릅니다. 명령 프롬프트 창의 내용은 다음과 같습니다.

sqlcmd

USE AdventureWorks2012;

GO

결과 집합은 다음과 같습니다.

Changed database context to 'AdventureWorks2012'.

1> _

입력한 sqlcmdUSE AdventureWorks2012 Enter 키를 눌러 새 줄을 시작합니다. 입력한 후 GO, ENTER 키를 눌러 SQL Server 인스턴스로 문을 보냅니 USE AdventureWorks2012sqlcmd. sqlcmd 그런 다음 문이 성공적으로 완료되었음을 나타내는 USE 메시지를 반환하고 새 명령문 또는 명령을 입력하는 신호로 새 1> 프롬프트를 표시했습니다.

다음 예제에서는 명령 프롬프트 창에 문을 입력 SELECT 하는 경우, 실행할 SELECT명령 프롬프트 창 및 EXIT 종료sqlcmd할 명령을 보여 GO 줍니다.

sqlcmd

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

결과 집합은 다음과 같습니다.

BusinessEntityID FirstName LastName

----------- -------------------------------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

1> EXIT

C:\>

줄 뒤의 줄 3> GO 은 문의 출력입니다 SELECT . 출력 sqlcmd 을 생성한 후 프롬프트를 sqlcmd 다시 설정하여 표시합니다 1>. 줄을 1>입력 EXIT 하면 명령 프롬프트 창에 처음 열 때와 동일한 줄이 표시됩니다. 이는 해당 세션을 종료했음을 나타냅니다 sqlcmd . 이제 다른 EXIT 명령을 입력하여 명령 프롬프트 창을 닫을 수 있습니다.

sqlcmd를 사용하여 Transact-SQL 스크립트 파일 실행

데이터베이스 스크립트 파일을 실행하는 데 사용할 sqlcmd 수 있습니다. 스크립트 파일은 Transact-SQL 문, sqlcmd 명령 및 스크립팅 변수가 혼합된 텍스트 파일입니다. 변수를 스크립팅하는 방법에 대한 자세한 내용은 스크립트 변수와 함께 sqlcmd 사용을 참조하세요. sqlcmd 는 대화형으로 입력된 문 및 명령과 작동하는 방식과 유사한 방식으로 스크립트 파일의 문, 명령 및 스크립팅 변수와 함께 작동합니다. 주요 차이점은 sqlcmd 사용자가 문, 명령 및 스크립팅 변수를 입력할 때까지 기다리는 대신 일시 중지 없이 입력 파일을 읽는 것입니다.

데이터베이스 스크립트 파일을 만드는 방법에는 여러 가지가 있습니다.

  • SQL Server Management Studio에서 Transact-SQL 문 집합을 대화형으로 빌드하고 디버그한 다음 쿼리 창의 내용을 스크립트 파일로 저장할 수 있습니다.

  • 메모장과 같은 텍스트 편집기를 사용하여 Transact-SQL 문이 포함된 텍스트 파일을 만들 수 있습니다.

예시

A. sqlcmd를 사용하여 스크립트 실행

메모장을 시작하고 다음 Transact-SQL 문을 입력합니다.

USE AdventureWorks2012;

GO

SELECT TOP (3) BusinessEntityID, FirstName, LastName

FROM Person.Person;

GO

MyFolder의 이름을 갖는 폴더를 만든 다음, 스크립트를 폴더 MyScript.sql에 파일 C:\MyFolder(으)로 저장합니다. 명령 프롬프트에서 다음을 입력하여 스크립트를 실행하고 출력 MyOutput.txt 을 입력합니다 MyFolder.

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

메모장에서 내용을 MyOutput.txt 볼 때 다음이 표시됩니다.

Changed database context to 'AdventureWorks2012'.

BusinessEntityID FirstName LastName

---------------- ----------- -----------

1 Syed Abbas

2 Catherine Abel

3 Kim Abercrombie

(3 rows affected)

B. 전용 관리 연결에서 sqlcmd 사용

다음 예제 sqlcmd 에서는 전용 DAC(관리자 연결)를 사용하여 차단 문제가 있는 서버에 연결하는 데 사용됩니다.

C:\>sqlcmd -S ServerName -A

1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;

2> GO

결과 집합은 다음과 같습니다.

spid blocked

------ -------

62 64

(1 rows affected)

차단 프로세스를 종료하는 데 사용합니다 sqlcmd .

1> KILL 64;

2> GO

C. sqlcmd를 사용하여 저장 프로시저 실행

다음 예제에서는 .를 사용하여 sqlcmd저장 프로시저를 실행하는 방법을 보여 있습니다. 다음 저장 프로시저를 만듭니다.

USE AdventureWorks2012;

IF OBJECT_ID ( ' dbo.ContactEmailAddress, 'P' ) IS NOT NULL

DROP PROCEDURE dbo.ContactEmailAddress;

GO

CREATE PROCEDURE dbo.ContactEmailAddress

(

@FirstName nvarchar(50)

,@LastName nvarchar(50)

)

AS

SET NOCOUNT ON

SELECT EmailAddress

FROM Person.Person

WHERE FirstName = @FirstName

AND LastName = @LastName;

SET NOCOUNT OFF

프롬프트에서 sqlcmd 다음을 입력합니다.

C:\sqlcmd

1> :Setvar FirstName Gustavo

1> :Setvar LastName Achong

1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)

2> GO

EmailAddress

-----------------------------

gustavo0@adventure-works.com

D. 데이터베이스 유지 관리에 sqlcmd 사용

다음 예제에서는 데이터베이스 유지 관리 작업에 사용하는 sqlcmd 방법을 보여줍니다. 다음 코드로 C:\BackupTemplate.sql를 만듭니다.

USE master;

BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';

프롬프트에서 sqlcmd 다음을 입력합니다.

C:\ >sqlcmd

1> :connect <server>

Sqlcmd: Successfully connected to server <server>.

1> :setvar db msdb

1> :setvar bakfile c:\msdb.bak

1> :r c:\BackupTemplate.sql

2> GO

Changed database context to 'master'.

Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.

Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.

BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)

E. sqlcmd를 사용하여 여러 인스턴스에서 코드 실행

단일 파일에 있는 다음 코드는 두 개의 인스턴스에 연결하는 스크립트를 보여 줍니다. 두 번째 인스턴스에 대한 연결 전에 GO가 있는 것을 주의하세요.

:CONNECT <server>\,<instance1>

EXEC dbo.SomeProcedure

GO

:CONNECT <server>\,<instance2>

EXEC dbo.SomeProcedure

GO

E. XML 출력 반환

다음 예에서는 XML 출력이 서식이 지정되지 않은 연속 스트림으로 반환되는 방법을 보여 줍니다.

C:\>sqlcmd -d AdventureWorks2012

1> :XML ON

1> SELECT TOP 3 FirstName + ' ' + LastName + ', '

2> FROM Person.Person

3> GO

Syed Abbas, Catherine Abel, Kim Abercrombie,

F. Windows 스크립트 파일에서 sqlcmd 사용

sqlcmd이러한 sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt, 명령은 VBScript와 함께 .bat 파일에서 실행할 수 있습니다. 이 경우 대화형 옵션을 사용하지 마세요. sqlcmd 은 .bat 파일을 실행하는 컴퓨터에 설치해야 합니다.

먼저 다음 네 개의 파일을 만듭니다.

  • C:\badscript.sql

    SELECT batch_1_this_is_an_error  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\goodscript.sql

    SELECT 'batch #1'  
    GO  
    SELECT 'batch #2'  
    GO  
    
  • C:\rreturnvalue.sql

    :exit(select 100)  
    @echo off  
    C:\windowsscript.bat  
    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    
  • C:\windowsscript.bat

    @echo off  
    
    echo Running badscript.sql  
    sqlcmd -i badscript.sql -b -o out.log  
    if not errorlevel 1 goto next1  
    echo == An error occurred   
    
    :next1  
    
    echo Running goodscript.sql  
    sqlcmd -i goodscript.sql -b -o out.log  
    if not errorlevel 1 goto next2  
    echo == An error occurred   
    
    :next2  
    echo Running returnvalue.sql  
    sqlcmd -i returnvalue.sql -o out.log  
    echo SQLCMD returned %errorlevel% to the command shell  
    
    :exit  
    

그런 다음 명령 프롬프트에서 C:\windowsscript.bat를 실행합니다.

C:\>windowsscript.bat

Running badscript.sql

== An error occurred

Running goodscript.sql

Running returnvalue.sql

SQLCMD returned 100 to the command shell

G. sqlcmd를 사용하여 Azure SQL Database에서 암호화 설정

암호화 및 인증서 트러스트를 지정하기 위해 SQL Database 데이터에 대한 연결에서 A sqlcmd를 실행할 수 있습니다. 다음 두 가지 'sqlcmd'' 옵션을 사용할 수 있습니다.

  • -N 스위치는 클라이언트에서 암호화된 연결을 요청하는 데 사용됩니다. 이 옵션은 ADO.net 옵션 ENCRYPT = true와 동일합니다.

  • -C 스위치는 클라이언트에서 암시적으로 신뢰 서버 인증서를 구성하고 유효성을 검사하지 않도록 구성하는 데 사용됩니다. 이 옵션은 ADO.net 옵션 TRUSTSERVERCERTIFICATE = true와 동일합니다.

SQL Database 서비스는 SQL Server 인스턴스에서 사용할 수 있는 모든 SET 옵션을 지원하지 않습니다. 다음 옵션은 해당하는 SET 옵션이 ON 또는 OFF로 설정되어 있는 경우 오류를 반환합니다.

  • SET ANSI_DEFAULTS

  • SET ANSI_NULLS (NULL 값에 대한 ANSI SQL 표준 준수 설정)

  • SET REMOTE_PROC_TRANSACTIONS

  • SET ANSI_NULL_DEFAULT

다음 SET 옵션은 예외를 throw하지 않지만 사용할 수 없습니다. 더 이상 사용되지 않습니다.

  • SET CONCAT_NULL_YIELDS_NULL

  • SET ANSI_PADDING (ANSI 패딩 설정)

  • SET QUERY_GOVERNOR_COST_LIMIT

문법

다음 예제는 SQL Server Native Client Provider 설정에 다음이 포함된 ForceProtocolEncryption = False경우를 참조합니다. Trust Server Certificate = No

Windows 자격 증명 및 암호화 통신을 사용하여 연결

SQLCMD -E -N  
  

Windows 자격 증명을 사용하여 연결하고 서버 인증서를 신뢰하십시오.

SQLCMD -E -C  
  

Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:

SQLCMD -E -N -C  
  

다음 예제는 SQL Server Native Client Provider 설정에 다음이 포함된 ForceProtocolEncryption = TrueTrustServerCertificate = Yes경우를 참조합니다.

Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:

SQLCMD -E  
  

Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:

SQLCMD -E -N  
  

Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:

SQLCMD -E -T  
  

Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:

SQLCMD -E -N -C  
  

공급자가 ForceProtocolEncryption = True를 지정한 경우, 연결 문자열에 Encrypt=No가 있어도 암호화가 활성화됩니다.

또한 참조하십시오

sqlcmd 유틸리티
스크립팅 변수와 함께 sqlcmd 사용
쿼리 편집기로 SQLCMD 스크립트 편집
작업 단계 관리
CmdExec 작업 단계 만들기