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 모드
SMO(SQL Server 관리 개체)
SQL Server 에이전트 CmdExec 작업
일반적으로 사용되는 sqlcmd 옵션
가장 일반적으로 사용되는 옵션은 다음과 같습니다.
연결하는 Microsoft
sqlcmd
SQL Server instance 식별하는 서버 옵션(-S)입니다.SQL Server instance 연결하는 데 사용하는 자격 증명
sqlcmd
을 지정하는 인증 옵션(-E, -U 및 -P)입니다.참고
-E 옵션은 기본값이므로 따로 지정하지 않아도 됩니다.
에 대한 입력 위치를 식별하는 입력
sqlcmd
옵션(-Q, -q 및 -i)입니다.출력을 넣을 파일을 지정하는
sqlcmd
출력 옵션(-o)입니다.
sqlcmd 유틸리티에 연결
sqlcmd
유틸리티의 일반적인 용도는 다음과 같습니다.
Transact-SQL 문을 대화형으로 실행하기 위해 Windows 인증을 사용하여 기본 인스턴스에 연결
sqlcmd -S <ComputerName>
참고
이전 예제에서 -E는 기본값
sqlcmd
이며 Windows 인증을 사용하여 기본 instance 연결하기 때문에 지정되지 않았습니다.Transact-SQL 문을 대화형으로 실행하기 위해 Windows 인증을 사용하여 명명된 인스턴스에 연결
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 인증을 사용하여 명명된 instance 연결하여 Transact-SQL 문을 대화형으로
sqlcmd
실행하고 암호를 묻는 메시지를 표시합니다.sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
참고
sqlcmd
유틸리티에서 지원하는 옵션 목록을 보려면sqlcmd -?
를 실행하십시오.
sqlcmd를 사용하여 대화형으로 Transact-SQL 문 실행
이 유틸리티를 sqlcmd
대화형으로 사용하여 명령 프롬프트 창에서 Transact-SQL 문을 실행할 수 있습니다. 를 사용하여 sqlcmd
Transact-SQL 문을 대화형으로 실행하려면 -Q, -q, -Z 또는 -i 옵션을 사용하지 않고 유틸리티를 실행하여 입력 파일 또는 쿼리를 지정합니다. 예를 들면 다음과 같습니다.
sqlcmd -S <ComputerName>\<InstanceName>
명령이 입력 파일이나 쿼리 sqlcmd
없이 실행되면 지정된 SQL Server instance 연결한 다음 프롬프트라는 sqlcmd
깜박이는 밑줄이 있는 새 줄을 1>
표시합니다. 는 1
이것이 Transact-SQL 문의 첫 번째 줄임을 의미하며 sqlcmd
, 프롬프트는 Transact-SQL 문을 입력할 때 시작되는 지점입니다.
프롬프트에서 sqlcmd
Transact-SQL 문과 sqlcmd
명령(예: GO
및 EXIT
)을 모두 입력할 수 있습니다. 각 Transact-SQL 문은 문 캐시라는 버퍼에 저장됩니다. 이러한 문은 명령을 입력 GO
하고 Enter 키를 누른 후 SQL Server 전송됩니다. 를 종료sqlcmd
하려면 또는 QUIT
를 새 줄의 시작 부분에 입력 EXIT
합니다.
문 캐시를 지우려면 :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
문은 여러 줄로 나누어져 있으나 GO
를 입력한 후 Enter 키를 누르면 단일 문자열로 실행됩니다.
SELECT First line
FROM Second line
WHERE Third line;
GO
대화형 sqlcmd 실행 예
다음은 sqlcmd
를 대화형으로 실행할 때 나타나는 내용의 예입니다.
명령 프롬프트 창을 열면 다음과 비슷한 줄 하나가 나타납니다.
C:\> _
이는 C:\
폴더가 현재 폴더이며 파일 이름을 지정하면 Windows가 해당 폴더에서 파일을 찾을 것이라는 의미입니다.
를 입력 sqlcmd
하여 로컬 컴퓨터에서 SQL Server 기본 instance 연결하고 명령 프롬프트 창의 내용은 다음과 같습니다.
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> _
USE AdventureWorks2012
를 입력한 다음 Enter 키를 누르면 sqlcmd
가 새 줄을 시작합니다. GO,
를 입력한 다음 Enter 키를 누르면 sqlcmd
가 USE AdventureWorks2012
문을 SQL Server인스턴스로 보냅니다. sqlcmd
는 USE
문이 성공적으로 완료되었음을 나타내는 메시지를 반환하고 새 1>
프롬프트를 표시하여 새 문이나 명령을 입력하도록 합니다.
다음 예에서는 SELECT
문, GO
를 실행할 SELECT
및 EXIT
를 종료할 sqlcmd
를 입력할 경우 명령 프롬프트 창에 나타나는 내용을 보여 줍니다.
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>
을 표시합니다. EXIT
줄에 1>
를 입력하면 명령 프롬프트 창을 처음 열었을 때와 동일한 줄이 표시됩니다. 이는 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 파일을 실행하는 컴퓨터에 설치되어야 합니다.
첫 번째 단계로 다음과 같은 4개의 파일을 만듭니다.
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:\returnvalue.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에서 암호화 설정
sqlcmd
SQL Database 데이터에 대한 연결에서 를 실행하여 암호화 및 인증서 신뢰를 지정할 수 있습니다. 다음 두 가지 '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
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
다음 SET 옵션은 예외를 반환하지 않지만 사용할 수 없습니다. 이러한 옵션은 더 이상 사용되지 않습니다.
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
구문
다음 예에서는 SQL Server Native Client 공급자 설정에 포함된 사례를 참조합니다. ForceProtocolEncryption = False
, Trust Server Certificate = No
Windows 자격 증명을 사용한 연결 및 통신 암호화:
SQLCMD -E -N
Windows 자격 증명을 사용한 연결 및 서버 인증서 신뢰:
SQLCMD -E -C
Windows 자격 증명을 사용한 연결, 통신 암호화 및 서버 인증서 신뢰:
SQLCMD -E -N -C
다음 예에서는 SQL Server Native Client 공급자 설정에 포함된 사례를 참조합니다. ForceProtocolEncryption = True
, TrustServerCertificate = 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 작업 단계 만들기