sqlcmd 유틸리티
이 sqlcmd
유틸리티를 사용하면 명령 프롬프트의 Transact-SQL 문, 시스템 프로시저 및 스크립트 파일을 SQLCMD 모드, Windows 스크립트 파일 또는 SQL Server 에이전트 작업의 운영 체제(Cmd.exe) 작업 단계에서 쿼리 편집기 입력할 수 있습니다. 이 유틸리티는 ODBC를 사용하여 Transact-SQL 일괄 처리를 실행합니다.
Important
SQL Server Management Studio는 쿼리 편집기 일반 및 SQLCMD 모드에서 실행하기 위해 Microsoft.NET FrameworkSqlClient를 사용합니다. sqlcmd
명령줄 sqlcmd
에서 실행되면 ODBC 드라이버를 사용합니다. 다른 기본 옵션이 적용될 수 있으므로 SQLCMD 모드 및 유틸리티에서 SQL Server Management Studio에서 동일한 쿼리를 실행할 때 다른 동작이 sqlcmd
표시될 수 있습니다.
현재 명령 sqlcmd
줄 옵션과 값 사이에 공백이 필요하지 않습니다. 그러나 이후 릴리스에서는 명령줄 옵션과 값 사이에 공백이 필요할 수 있습니다.
구문
sqlcmd
-a
packet_size
-A (dedicated administrator connection)
-b (terminate batch job if there is an error)
-cbatch_terminator-C (trust the server certificate)
-ddb_name-e (echo input)
-E (use trusted connection)
-fcodepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
-hrows_per_header-Hworkstation_name-iinput_file-I (enable quoted identifiers)
-k[1 | 2] (remove or replace control characters)
-Kapplication_intent-llogin_timeout-L[c] (list servers, optional clean output)
-merror_level-Mmultisubnet_failover-N (encrypt connection)
-ooutput_file-p[1] (print statistics, optional colon format)
-Ppassword-q "cmdline query"-Q "cmdline query" (and exit)
-r[0 | 1] (msgs to stderr)
-R (use client regional settings)
-scol_separator-S [protocol:]server[\instance_name][,port]
-tquery_timeout-u (unicode output file)
-Ulogin_id-vvar = "value"-Verror_severity_level-wcolumn_width-W (remove trailing spaces)
-x (disable variable substitution)
-X[1] (disable commands, startup script, environment variables and optional exit)
-yvariable_length_type_display_width-Yfixed_length_type_display_width-znew_password -Znew_password (and exit)
-? (usage)
명령줄 옵션
로그인 관련 옵션
-A
DAC(관리자 전용 연결)를 사용하여 SQL Server에 로그인합니다. 이러한 종류의 연결은 서버 문제 해결에 사용됩니다. DAC를 지원하는 서버 컴퓨터에서만 작동합니다. DAC를 사용할 수 sqlcmd
없는 경우 오류 메시지를 생성한 다음 종료합니다. DAC에 대한 자세한 내용은 데이터베이스 관리자를 위한 진단 연결을 참조하세요.
-C
이 스위치는 클라이언트에서 유효성 검사 없이 서버 인증서를 암시적으로 신뢰하도록 구성하는 데 사용됩니다. 이 옵션은 ADO.NET 옵션 TRUSTSERVERCERTIFICATE = true
와 동일합니다.
-d db_name
USE
시작할 sqlcmd
때 db_name 문을 실행합니다. 이 옵션은 SQLCMDDBNAME 스크립팅 변수를 설정합니다 sqlcmd
. 초기 데이터베이스를 지정합니다. 기본값은 로그인의 기본 데이터베이스 속성입니다. 데이터베이스가 없으면 오류 메시지가 생성되고 sqlcmd
종료됩니다.
-l login_timeout
서버에 연결을 시도할 때 ODBC 드라이버에 대한 sqlcmd
로그인 제한 시간(초)을 지정합니다. 이 옵션은 스크립팅 변수 SQLCMDLOGINTIMEOUT을 설정합니다 sqlcmd
. 로그인 sqlcmd
의 기본 제한 시간은 8초입니다. 로그인 제한 시간은 0과 65534 사이의 숫자여야 합니다. 제공된 값이 숫자가 아니거나 해당 범위에 sqlcmd
속하지 않으면 오류 메시지가 생성됩니다. 0 값은 제한 시간을 무한으로 지정합니다.
-E
사용자 이름과 암호를 사용하여 SQL Server에 로그온하는 대신 신뢰할 수 있는 연결을 사용합니다. 기본적으로 -E를 sqlcmd
지정하지 않고 신뢰할 수 있는 연결 옵션을 사용합니다.
-E 옵션은 SQLCMDPASSWORD와 같은 가능한 사용자 이름 및 암호 환경 변수 설정을 무시합니다. -E 옵션과 함께 -U 옵션 또는 -P 옵션을 사용하면 오류 메시지가 생성됩니다.
-H workstation_name
워크스테이션 이름입니다. 이 옵션은 SQLCMDWORKSTATION 스크립팅 변수를 설정합니다 sqlcmd
. 워크스테이션 이름은 sys.processes 카탈로그 뷰의 호스트 이름 열에 나열되며 저장 프로시저 sp_who 사용하여 반환할 수 있습니다. 이 옵션을 지정하지 않으면 기본값은 현재 컴퓨터 이름입니다. 이 이름을 사용하여 다른 sqlcmd
세션을 식별할 수 있습니다
-K application_intent
서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. 현재 지원되는 유일한 값은 ReadOnly입니다. -K를 지정하지 않으면 sqlcmd 유틸리티는 AlwaysOn 가용성 그룹의 보조 복제본에 대한 연결을 지원하지 않습니다. 자세한 내용은 활성 보조 복제본: 읽기 가능한 보조 복제본을 참조하세요.
-M
multisubnet_failover
SQL Server 가용성 그룹 또는 SQL Server 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때는 항상 -M
을 지정합니다. -M
은 현재 활성 상태인 서버를 빠르게 검색하여 연결할 수 있도록 제공합니다. -M
이 지정되지 않은 경우 -M
이 해제됩니다. Always On 가용성 그룹에 대한 자세한 내용은 가용성 그룹 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(failover), 가용성 그룹 만들기 및 구성(SQL Server), 장애 조치(failover) 클러스터링 및 AlwaysOn 가용성 그룹(SQL Server) 및 활성 보조 복제본: 읽기 가능한 보조 복제본을 참조하세요.
-N
이 스위치는 클라이언트에서 암호화된 연결을 요청하는 데 사용됩니다.
-P password
사용자가 지정한 비밀번호입니다. 암호는 대/소문자를 구분합니다. -U 옵션을 사용하고 -P 옵션을 사용하지 않고 SQLCMDPASSWORD 환경 변수가 설정 sqlcmd
되지 않은 경우 사용자에게 암호를 묻는 메시지를 표시합니다. 암호 sqlcmd
없이 명령 프롬프트의 끝에서 -P 옵션을 사용하는 경우 기본 암호(NULL)를 사용합니다.
Important
빈 비밀번호를 사용하지 마세요. 강력한 비밀번호를 사용하세요. 자세한 내용은 강력한 비밀번호를 참조하세요.
비밀번호 프롬프트는 Password:
과 같이 콘솔에 출력되어 표시됩니다.
사용자 입력이 숨겨집니다. 즉, 아무 것도 표시되지 않으며 커서 위치가 유지됩니다.
SQLCMDPASSWORD 환경 변수를 사용하면 현재 세션에 대한 기본 암호를 설정할 수 있습니다. 그러므로 암호를 배치 파일로 하드 코딩할 필요가 없습니다.
다음 예에서는 먼저 명령 프롬프트에서 SQLCMDPASSWORD 변수를 설정하고 sqlcmd
유틸리티에 액세스합니다. 명령 프롬프트에서 다음을 입력합니다.
SET SQLCMDPASSWORD= p@a$$w0rd
Important
암호는 컴퓨터 모니터를 볼 수 있는 모든 사용자에게 표시됩니다.
다음 명령 프롬프트에서 다음을 입력합니다.
sqlcmd
사용자 이름과 비밀번호 조합이 올바르지 않으면 오류 메시지가 생성됩니다.
참고 항목
OSQLPASSWORD 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDPASSWORD 환경 변수는 OSQLPASSWORD 환경 변수보다 우선합니다. 즉sqlcmd
, osql은 간섭 없이 나란히 사용할 수 있으며 이전 스크립트는 계속 작동합니다.
-P 옵션과 함께 -E 옵션을 사용하면 오류 메시지가 생성됩니다.
-P 옵션 뒤에 둘 이상의 인수가 있으면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-S [protocol:]server[\instance_name][,port]
연결할 SQL Server 인스턴스를 지정합니다. 스크립팅 변수 SQLCMDSERVER를 설정합니다 sqlcmd
.
해당 서버 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결하려면 server_name을 지정합니다. 해당 서버 컴퓨터에 있는 명명된 SQL Server 인스턴스에 연결하려면 server_name [ \instance_name ]을 지정합니다. 서버 컴퓨터를 지정 sqlcmd
하지 않으면 로컬 컴퓨터에서 SQL Server의 기본 인스턴스에 연결합니다. 이 옵션은 네트워크의 원격 컴퓨터에서 실행할 sqlcmd
때 필요합니다.
protocol은 tcp
(TCP/IP), lpc
(공유 메모리) 또는 np
(명명된 파이프)일 수 있습니다.
시작할 sqlcmd
때 [instance_name] server_name \ 지정하지 않으면 SQL Server는 SQLCMDSERVER 환경 변수를 확인하고 사용합니다.
참고 항목
OSQLSERVER 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDSERVER 환경 변수는 OSQLSERVER 환경 변수보다 우선합니다. 즉sqlcmd
, osql은 간섭 없이 나란히 사용할 수 있으며 이전 스크립트는 계속 작동합니다.
-U login_id
사용자 로그인 ID입니다.
참고 항목
OSQLUSER 환경 변수는 이전 버전과의 호환성을 위해 사용할 수 있습니다. SQLCMDUSER 환경 변수가 OSQLUSER 환경 변수보다 우선합니다. 즉sqlcmd
, osql은 간섭 없이 나란히 사용할 수 있습니다. 또한 기존 osql 스크립트가 계속 작동한다는 것을 의미합니다.
-U 옵션이나 -P 옵션이 지정되지 sqlcmd
않은 경우 Microsoft Windows 인증 모드를 사용하여 연결을 시도합니다. sqlcmd
를 실행하는 사용자의 Windows 계정을 기반으로 인증이 수행됩니다.
-U 옵션이 -E 옵션과 함께 사용되는 경우(이 항목의 뒷부분에서 설명) 오류 메시지가 생성됩니다. -U 옵션 다음에 둘 이상의 인수를 지정하면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-z new_password
암호를 변경합니다.
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
-Z new_password
암호를 변경하고 종료합니다.
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
입/출력 옵션
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
입력 및 출력 코드 페이지를 지정합니다. 코드 페이지 번호는 설치된Windows 코드 페이지를 지정하는 숫자 값입니다.
코드 페이지 변환 규칙:
코드 페이지가 지정되지
sqlcmd
않은 경우 입력 파일이 유니코드 파일이 아니면 현재 코드 페이지를 입력 파일과 출력 파일 모두에 사용합니다. 이 경우 변환이 필요하지 않습니다.sqlcmd
는 big-endian 및 little-endian 유니코드 입력 파일을 모두 자동으로 인식합니다. -u 옵션을 지정한 경우 출력은 항상 little-endian 유니코드가 됩니다.출력 파일을 지정하지 않으면 출력 코드 페이지가 콘솔 코드 페이지가 됩니다. 이 경우 출력이 콘솔에 올바르게 표시됩니다.
여러 입력 파일이 있는 경우 동일한 코드 페이지를 사용하는 것으로 간주됩니다. UNICODE 및 비 UNICODE 입력 파일을 혼합할 수 있습니다.
명령 프롬프트에 입력 chcp
하여 Cmd.exe 코드 페이지를 확인합니다.
-i input_file[,input_file2...]
SQL 문 또는 저장 프로시저의 배치가 포함된 파일을 식별합니다. 순서대로 읽고 처리할 파일을 여러 개 지정할 수 있습니다. 파일 이름 사이에 공백을 사용하지 마세요. 먼저 sqlcmd
는 지정한 모든 파일이 있는지 확인합니다. 하나 이상의 파일이 없을 경우 sqlcmd
가 종료됩니다. -i 및 -Q/-q 옵션은 함께 사용할 수 없습니다.
경로 예:
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
공백을 포함한 파일 경로는 인용 부호로 묶어야 합니다.
이 옵션은 두 번 이상 사용할 수 있습니다. -iinput_file -Iinput_file.
-o output_file
에서 sqlcmd
출력을 받는 파일을 식별합니다.
-u를 지정하면 output_file 유니코드 형식으로 저장됩니다. 파일 이름이 잘못된 경우 오류 메시지가 생성되고 sqlcmd
가 종료됩니다. sqlcmd
는 여러 sqlcmd
프로세스를 같은 파일에 동시에 쓸 수 없습니다. 파일 출력이 손상되었거나 올바르지 않습니다. 파일 형식에 대한 자세한 내용은 -f 스위치를 참조하세요. 이 파일이 없으면 만들어집니다. 이전 sqlcmd
세션에서 동일한 이름의 파일을 덮어씁니다. 여기에 지정된 파일이 stdout 파일이 아닙니다. stdout 파일이 지정된 경우 이 파일은 사용되지 않습니다.
경로 예:
-o C:\< 파일 이름>
-o \\<Server>\<Share$>\<filename>
**-o "**C:\Some Folder\<file name>"
공백을 포함한 파일 경로는 인용 부호로 묶어야 합니다.
-r[0 | 1]
오류 메시지 출력을 화면(stderr)으로 리디렉션합니다. 매개 변수를 지정하지 않거나 0을 지정하는 경우 심각도 수준이 11 이상인 오류 메시지만 리디렉션됩니다. 1을 지정하면 PRINT를 포함한 모든 오류 메시지 출력이 리디렉션됩니다. -o를 사용하는 경우 아무런 효과가 없습니다. 기본적으로 메시지는 stdout으로 전송됩니다.
-R
sqlcmd
클라이언트의 로캘에 따라 SQL Server에서 검색된 숫자, 통화, 날짜 및 시간 열을 지역화합니다. 기본적으로 이러한 열은 서버의 국가별 설정을 사용하여 표시됩니다.
-u
input_file 형식에 관계없이 output_file이 유니코드 형식으로 저장되도록 지정합니다.
쿼리 실행 옵션
-e
입력 스크립트를 표준 출력 디바이스(stdout)에 씁니다.
-나는
SET QUOTED_IDENTIFIER 연결 옵션을 ON으로 설정합니다. 기본적으로 OFF로 설정되어 있습니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.
-q" cmdline query "
시작할 때 sqlcmd
쿼리를 실행하지만 쿼리 실행이 완료되면 종료 sqlcmd
되지 않습니다. 다중 세미콜론으로 구분된 쿼리를 실행할 수 있습니다. 다음 예제와 같이 쿼리 주위에 인용 부호를 사용합니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks2012 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2012 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
쿼리에서 GO 종결자를 사용하지 마세요.
이 옵션 sqlcmd
과 함께 지정되면 -b
오류가 발생하면 종료됩니다. -b
에 대해서는 이 항목의 뒷부분에서 설명합니다.
-Q" cmdline query "
시작할 때 sqlcmd
쿼리를 실행한 다음 즉시 종료합니다 sqlcmd
. 다중 세미콜론으로 구분된 쿼리를 실행할 수 있습니다.
다음 예제와 같이 쿼리 주위에 인용 부호를 사용합니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks2012 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2012 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
쿼리에서 GO 종결자를 사용하지 마세요.
이 옵션 sqlcmd
과 함께 지정되면 -b
오류가 발생하면 종료됩니다. -b
에 대해서는 이 항목의 뒷부분에서 설명합니다.
-t query_timeout
명령(또는 SQL 문)이 시간 초과되기 전의 시간(초)을 지정합니다. 이 옵션은 스크립팅 변수 SQLCMDSTATTIMEOUT을 설정합니다 sqlcmd
. time_out 값을 지정하지 않으면 명령 시간이 초과되지 않습니다. query**time_out 1에서 65534 사이의 숫자여야 합니다. 제공된 값이 숫자가 아니거나 해당 범위에 sqlcmd
속하지 않으면 오류 메시지가 생성됩니다.
참고 항목
실제 제한 시간 값은 지정된 time_out 값과 몇 초씩 다를 수 있습니다.
-vvar = value[ var = value...]
스크립트에서 sqlcmd
사용할 수 있는 스크립팅 변수를 sqlcmd
만듭니다. 파일 이름에 공백이 있으면 값을 인용 부호로 묶습니다. 여러 var="values
" 값을 지정할 수 있습니다. 지정한 값에 오류가 있을 경우 sqlcmd
는 오류 메시지를 생성하고 종료됩니다.
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
sqlcmd
스크립팅 변수를 무시합니다. 이는 스크립트에 $(variable_name)와 같은 일반 변수와 형식이 같은 문자열을 포함할 수 있는 많은 INSERT 문이 포함된 경우에 유용합니다.
서식 옵션
-h headers
열 제목 사이에 인쇄할 행 수를 지정합니다. 기본적으로 각 쿼리 결과 세트마다 제목을 한 번 인쇄합니다. 이 옵션은 스크립팅 변수 SQLCMDHEADERS를 설정합니다 sqlcmd
. 머리글을 출력하지 않으려면 -1 을 사용합니다. 유효 sqlcmd
하지 않은 값은 오류 메시지를 생성한 다음 종료합니다.
-k [1 | 2]
출력에서 탭 및 줄 바꿈 문자와 같은 모든 제어 문자를 제거합니다. 이렇게 하면 데이터가 반환되는 경우 열 서식이 유지됩니다. 1을 지정하면 컨트롤 문자가 단일 공백으로 대체됩니다. 2를 지정하면 연속된 컨트롤 문자가 단일 공백으로 대체됩니다. -k는 -k1과 동일합니다.
-s col_separator
열 구분 기호 문자를 지정합니다. 기본값은 공백입니다. 이 옵션은 SQLCMDCOLSEP 스크립팅 변수를 설정합니다 sqlcmd
. 앰퍼샌드(&) 또는 세미콜론(;))과 같이 운영 체제에 특별한 의미가 있는 문자를 사용하려면 문자를 따옴표(")로 묶습니다. 열 구분 기호는 8비트 문자일 수 있습니다.
-w column_width
출력의 화면 너비를 지정합니다. 이 옵션은 스크립팅 변수 SQLCMDCOLWIDTH를 설정합니다 sqlcmd
. 열 너비는 8보다 크고 65536보다 작은 숫자여야 합니다. 지정한 열 너비가 해당 범위에 sqlcmd
속하지 않으면 생성 및 오류 메시지가 표시됩니다. 기본값은 80자입니다. 출력 줄이 지정된 열 너비를 초과하면 다음 줄로 줄바꿈됩니다.
-W
이 옵션은 열에서 후행 공백을 제거합니다. 다른 애플리케이션으로 내보 낼 데이터를 준비할 때 -s 옵션과 함께 이 옵션을 사용합니다. -y 또는 -Y 옵션과 함께 사용할 수 없습니다.
-y variable_length_type_display_width
sqlcmd
스크립팅 변수 SQLCMDMAXVARTYPEWIDTH를 설정합니다. 기본값은 256입니다. 큰 변수 길이 데이터 형식에 대해 반환되는 문자 수를 제한합니다.
varchar(max)
nvarchar(max)
varbinary(max)
xml
UDT (user-defined data types)
text
ntext
image
참고 항목
UDT는 구현에 따라 길이가 고정될 수 있습니다. 고정 길이 UDT의 길이가 display_width 짧으면 반환된 UDT의 값은 영향을 받지 않습니다. 그러나 길이가 display_width보다 길면 출력이 잘립니다.
Important
-y 0 옵션은 반환되는 데이터 크기에 따라 서버와 네트워크 모두에서 심각한 성능 문제를 일으킬 수 있으므로 사용 시 매우 주의해야 합니다.
-Y fixed_length_type_display_width
sqlcmd
스크립팅 변수 SQLCMDMAXFIXEDTYPEWIDTH를 설정합니다. 기본값은 0(무제한)입니다. 다음 데이터 형식에 대해 반환되는 문자 수를 제한합니다.
char(
n)
, 여기서 1<=n<=8000nchar(n
n)
, 여기서 1<=n<=4000varchar(n
n)
, 여기서 1<=n<=8000nvarchar(n
n)
, 여기서 1<=n<=4000varbinary(n
n)
, 여기서 1<=n<=4000variant
오류 보고 옵션
-b
sqlcmd
오류가 발생할 때 종료하고 DOS ERRORLEVEL 값을 반환합니다. SQL Server 오류 메시지의 심각도가 10보다 큰 경우 DOS ERRORLEVEL 변수로 1이 반환되며 그렇지 않은 경우 0이 반환됩니다. -V
외에도 -b
옵션을 설정한 경우 심각도가 -V
를 사용하여 설정한 값보다 작으면 sqlcmd
는 오류를 보고하지 않습니다. 명령 프롬프트 배치 파일은 ERRORLEVEL 값을 테스트하고 그에 따라 적절히 오류를 처리할 수 있습니다. sqlcmd
는 심각도가 10(정보 메시지)인 오류는 보고하지 않습니다.
스크립트에 sqlcmd
잘못된 주석, 구문 오류가 있거나 스크립팅 변수가 없는 경우 반환된 ERRORLEVEL은 1입니다.
-m error_level
stdout으로 전송 되는 오류 메시지를 제어합니다. 심각도가 이 수준보다 크거나 같은 메시지는 보내집니다. 이 값을 -1로 설정하면 정보 메시지를 포함한 모든 메시지가 전송됩니다. -m과 -1 사이에는 공백이 허용되지 않습니다. 예를 들어 -m-1 은 유효하고 -m-1 은 유효하지 않습니다.
이 옵션은 스크립팅 변수 SQLCMDERRORLEVEL도 설정합니다 sqlcmd
. 이 변수의 기본값은 0입니다.
-V
error_severity_level
ERRORLEVEL 변수를 설정하는 데 사용되는 심각도를 제어합니다. 심각도가 이 값보다 크거나 같은 오류 메시지는 ERRORLEVEL을 설정합니다. 0보다 작은 값은 0으로 보고됩니다. 배치 파일 및 CMD 파일은 ERRORLEVEL 변수의 값을 테스트하는 데 사용할 수 있습니다.
기타 옵션
-a packet_size
다른 크기의 패킷을 요청합니다. 이 옵션은 sqlcmd
스크립팅 변수 SQLCMDPACKETSIZE를 설정합니다. packet_size 는 512에서 32767 사이의 값이어야 합니다. 기본값은 4096입니다. 패킷 크기가 클수록 GO 명령 간에 많은 SQL 문이 있는 스크립트 실행을 위한 성능이 향상될 수 있습니다. 더 큰 패킷 크기를 요청할 수 있습니다. 그러나 요청이 거부된 sqlcmd
경우 패킷 크기에 대해 서버 기본값을 사용합니다.
-c batch_terminator
일괄 처리 종결자를 지정합니다. 기본적으로 줄에 “GO”만 단독으로 입력하면 명령이 종료되어 SQL Server로 보내집니다. 일괄 처리 종결자를 다시 설정할 때는 앞에 백슬래시가 있더라도 Transact-SQL 예약 키워드 또는 운영 체제와 연관된 특별한 의미를 가진 문자를 사용하지 마십시오.
-L[c]
로컬로 구성된 서버 컴퓨터와 네트워크에서 브로드캐스팅 중인 서버 컴퓨터의 이름을 나열합니다. 이 매개 변수는 다른 매개 변수와 함께 사용할 수 없습니다. 나열할 수 있는 서버 컴퓨터의 최대 수는 3000입니다. 버퍼 크기 때문에 서버 목록이 잘리면 경고 메시지가 표시됩니다.
참고 항목
네트워크에서 sqlcmd
브로드캐스트의 특성 때문에 모든 서버에서 적시에 응답을 받지 못할 수 있습니다. 따라서 반환되는 서버 목록은 이 옵션의 호출마다 다를 수 있습니다.
선택적 매개 변수 c 를 지정하면 출력이 서버 없이 나타납니다. 헤더 줄과 각 서버 줄은 선행 공백 없이 나열됩니다. 이를 클린 출력이라고 합니다. 클린 출력은 스크립팅 언어의 처리 성능을 향상시킵니다.
-p[1]
모든 결과 집합에 대한 성능 통계를 출력합니다. 다음은 성능 통계 형식의 예입니다.
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
여기서
x
= SQL Server에서 처리되는 트랜잭션 수
t1
= 모든 트랜잭션의 총 시간
t2
= 단일 트랜잭션의 평균 시간
t3
= 초당 평균 트랜잭션 수
모든 시간은 밀리초 단위입니다.
선택적 매개 변수 1 을 지정할 경우 통계의 출력 형식은 콜론으로 구분된 형식입니다. 이 형식은 스프레드시트로 쉽게 가져오거나 스크립트를 통해 처리할 수 있습니다.
선택적 매개 변수가 1 이외의 값이면 오류가 생성되고 sqlcmd
종료됩니다.
-X
[1]
배치 파일에서 sqlcmd
를 실행할 때 시스템 보안을 손상시킬 수 있는 명령을 사용할 수 없게 설정합니다. 비활성화된 명령은 여전히 인식됩니다. sqlcmd
경고 메시지를 표시하고 계속합니다. 선택적 매개 변수 1 을 지정 sqlcmd
하면 오류 메시지가 생성되고 종료됩니다. -X
옵션을 사용하면 다음 명령이 사용할 수 없게 설정됩니다.
ED
!! 명령
-X
옵션을 지정하면 환경 변수가 sqlcmd
에 전달되지 않습니다. 또한 SQLCMDINI 스크립팅 변수를 사용하여 지정된 시작 스크립트가 실행되지 않도록 합니다. 스크립팅 변수에 대한 sqlcmd
자세한 내용은 스크립팅 변수와 함께 sqlcmd 사용을 참조 하세요.
-?
sqlcmd
옵션의 구문 요약 정보를 표시합니다.
설명
구문 섹션에 표시된 순서대로 옵션을 사용할 필요가 없습니다.
여러 결과가 반환 sqlcmd
되면 일괄 처리에서 각 결과 집합 사이에 빈 줄을 인쇄합니다. 또한 "<영향을 받는 x> 행" 메시지는 실행된 문에 적용되지 않을 때 표시되지 않습니다.
대화형으로 사용 sqlcmd
하려면 명령 프롬프트에 이 항목의 앞부분에서 설명한 옵션 중 하나 이상을 입력 sqlcmd
합니다. 자세한 내용은 sqlcmd 유틸리티 사용을 참조하세요.
참고 항목
-L, -Q, -Z 또는 -i 옵션으로 인해 sqlcmd
실행 후 종료됩니다.
모든 인수 및 확장된 변수를 포함하여 명령 환경(Cmd.exe)의 sqlcmd
명령줄의 총 길이는 운영 체제에서 Cmd.exe 결정됩니다.
변수 우선 순위(낮음에서 높음)
시스템 수준 환경 변수입니다.
사용자 수준 환경 변수
명령을 실행
sqlcmd
하기 전에 명령 프롬프트에서 설정된 명령 셸(SET X=Y)sqlcmd-v X=Y
:Setvar X Y
참고 항목
환경 변수를 보려면 제어 패널에서 시스템을 연 다음 고급 탭을 클릭합니다.
sqlcmd 스크립팅 변수
변수 | 관련 스위치 | R/W | 기본값 |
---|---|---|---|
SQLCMDUSER | -U | R | "" |
SQLCMDPASSWORD | P- | -- | "" |
SQLCMDSERVER | S- | R | "DefaultLocalInstance" |
SQLCMDWORKSTATION | -H | R | "ComputerName" |
SQLCMDDBNAME | -d | R | "" |
SQLCMDLOGINTIMEOUT | -l | R/W | "8"(초) |
SQLCMDSTATTIMEOUT | -t | R/W | "0" = 무기한 대기 |
SQLCMDHEADERS | -H | R/W | "0" |
SQLCMDCOLSEP | -s | R/W | " " |
SQLCMDCOLWIDTH | -w | R/W | "0" |
SQLCMDPACKETSIZE | -a | R | "4096" |
SQLCMDERRORLEVEL | -m | R/W | 0 |
SQLCMDMAXVARTYPEWIDTH | -y | R/W | "256" |
SQLCMDMAXFIXEDTYPEWIDTH | -Y | R/W | "0" = 제한 없음 |
SQLCMDEDITOR | R/W | "edit.com" | |
SQLCMDINI | R | "" |
SQLCMDUSER, SQLCMDPASSWORD 및 SQLCMDSERVER는 :Connect가
가 사용됩니다.
R은 프로그램 초기화 중에 값을 한 번만 설정할 수 있음을 나타냅니다.
R/W는 setvar 명령을 사용하여 값을 수정할 수 있으며 후속 명령은 새 값의 영향을 받습니다.
sqlcmd 명령
내 Transact-SQL 문 sqlcmd
외에도 다음 명령을 사용할 수 있습니다.
GO [개수] | List: |
[:] RESET | 오류: |
[:] ED | :Out |
[:] !! | :Perftrace |
[:] QUIT | 연결: |
[:] EXIT | :On Error |
:r | 도움말: |
:ServerList | :XML [ON | OFF] |
:Setvar | :Listvar |
명령을 사용하는 sqlcmd
경우 다음 사항에 유의하세요.
GO를 제외한 모든
sqlcmd
명령은 콜론(:) 접두사로 지정되어야 합니다.Important
기존 osql 스크립트와의 이전 버전과의 호환성을 유지하기 위해 콜론 없이 일부 명령이 인식됩니다. 이러한 명령은 [:]으로 표시됩니다.
sqlcmd
명령은 줄 시작 부분에 나타난 경우에만 인식됩니다.모든
sqlcmd
명령은 대/소문자를 구분하지 않습니다.각 명령을 별도의 줄에 입력해야 합니다. 명령 뒤에 Transact-SQL 문이나 다른 명령이 올 수 없습니다.
명령은 즉시 실행됩니다. Transact-SQL 문과 같이 실행 버퍼에 배치되지 않습니다.
명령 편집
[:] ED
텍스트 편집기를 시작합니다. 이 편집기를 사용하여 현재 Transact-SQL 배치 또는 마지막으로 실행된 배치를 편집할 수 있습니다. 마지막으로 실행된 일괄 처리를 편집하려면 마지막 일괄 처리 실행을 마친 후 즉시 ED 명령을 입력해야 합니다.
텍스트 편집기는 SQLCMDEDITOR 환경 변수에 의해 정의됩니다. 기본 편집기는 '편집'입니다. 편집기를 변경하려면 SQLCMDEDITOR 환경 변수를 설정합니다. 예를 들어 편집기를 Microsoft 메모장에 설정하려면 명령 프롬프트에서 다음을 입력합니다.
SET SQLCMDEDITOR=notepad
[:] RESET
문 캐시를 지웁니다.
List:
문 캐시 내용을 출력합니다.
변수
:Setvar<var> [ "value
" ]
sqlcmd
스크립팅 변수를 정의합니다. 스크립팅 변수의 형식은 다음과 같습니다. $(VARNAME)
변수 이름은 대/소문자를 구분하지 않습니다.
스크립팅 변수는 다음과 같은 방법으로 설정할 수 있습니다.
명령줄 옵션을 사용하여 암시적으로 설정합니다. 예를 들어 -l 옵션은 SQLCMDLOGINTIMEOUT
sqlcmd
변수를 설정합니다.명시적으로 :Setvar 명령을 사용합니다.
실행
sqlcmd
하기 전에 환경 변수를 정의합니다.
참고 항목
-X
옵션은 환경 변수가 sqlcmd
에 전달되지 않도록 합니다.
:Setvar을 사용하여 정의된 변수와 환경 변수의 이름이 같으면 :Setvar을 사용하여 정의된 변수가 우선합니다.
변수 이름에는 빈 공백 문자가 포함되어서는 안 됩니다.
변수 이름은 $(var) 등의 변수 식과 다른 형식이어야 합니다.
스크립팅 변수의 문자열 값에 빈 공백이 포함된 경우 값을 인용 부호로 묶습니다. 스크립팅 변수의 값을 지정하지 않으면 스크립팅 변수가 삭제됩니다.
:Listvar
현재 설정된 스크립팅 변수 목록을 표시합니다.
참고 항목
로 설정된 sqlcmd
스크립팅 변수와 :Setvar 명령을 사용하여 설정된 변수만 표시됩니다.
출력 명령
오류:
<filename>| STDERR|STDOUT
모든 오류 출력을 파일 이름, stderr 또는 stdout으로 지정한 파일로 리디렉션합니다. 스크립트에서 Error 명령이 여러 번 나타날 수 있습니다. 기본적으로 오류 출력은 stderr로 전송됩니다.
file name
출력을 받을 파일을 만들고 엽니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 사용 권한 또는 기타 이유로 인해 파일을 사용할 수 없는 경우 출력이 전환되지 않고 마지막으로 지정된 대상 또는 기본 대상으로 전송됩니다.
STDERR
오류 출력을 stderr 스트림으로 전환합니다. 리디렉션된 경우 스트림이 리디렉션된 대상은 오류 출력을 받게 됩니다.
STDOUT
오류 출력을 stdout 스트림으로 전환합니다. 리디렉션된 경우 스트림이 리디렉션된 대상은 오류 출력을 받게 됩니다.
:Out < 파일 이름 >| STDERR| STDOUT
쿼리 결과를 만들어 file name에 지정된 파일, stderr 또는 stdout으로 모두 리디렉션합니다. 기본적으로 출력은 stdout으로 전송됩니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 스크립트에서 Out 명령이 여러 번 나타날 수 있습니다.
:P erftrace < 파일 이름 >| STDERR| STDOUT
모든 성능 추적 정보를 만들고 파일 이름, stderr 또는 stdout으로 지정한 파일로 리디렉션합니다. 기본적으로 성능 추적 출력은 stdout으로 전송됩니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 스크립트에서 Perftrace 명령이 여러 번 나타날 수 있습니다.
실행 제어 명령
:On Error[ exit
| ignore
]
스크립트 또는 배치 실행 중에 오류가 발생할 때 수행할 작업을 설정합니다.
exit
옵션을 사용하면 sqlcmd
적절한 오류 값으로 종료됩니다.
ignore
옵션을 사용하면 sqlcmd
오류를 무시하고 일괄 처리 또는 스크립트를 계속 실행합니다. 기본적으로 오류 메시지가 출력됩니다.
[:] QUIT
sqlcmd
종료 원인입니다.
[:] EXIT[ (statement
) ]
SELECT 문의 결과를 반환 값 sqlcmd
으로 사용할 수 있습니다. 숫자인 경우 마지막 결과 행의 첫 번째 열이 4바이트 정수(long)로 변환됩니다. MS-DOS는 하위 바이트를 부모 프로세스 또는 운영 체제 오류 수준에 전달합니다. Windows 200x는 전체 4 바이트 정수입니다. 구문은 다음과 같습니다.
:EXIT(query)
예시:
:EXIT(SELECT @@ROWCOUNT)
EXIT 매개 변수를 일괄 처리 파일의 일부로 포함할 수도 있습니다. 예를 들어 명령 프롬프트에서 다음을 입력합니다.
sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"
유틸리티는 sqlcmd
괄호 () 의 모든 항목을 서버로 보냅니다. 시스템 저장 프로시저가 집합을 선택하고 값을 반환하는 경우 선택 항목만 반환됩니다. 괄호 사이에 아무것도 없는 EXIT**()** 문은 일괄 처리에서 이 문 앞에 나오는 모든 문을 실행한 후에 반환 값 없이 종료됩니다.
잘못된 쿼리를 지정 sqlcmd
하면 반환 값 없이 종료됩니다.
EXIT 형식 목록은 다음과 같습니다.
- :출구
일괄 처리를 실행하지 않고 즉시 종료하고 값을 반환하지 않습니다.
- :EXIT( )
배치를 실행한 다음 종료하고 값을 반환하지 않습니다.
- :EXIT(쿼리)
쿼리를 포함하는 배치를 실행한 다음 쿼리 결과를 반환한 후 종료합니다.
RAISERROR가 스크립트 내에서 sqlcmd
사용되고 상태가 127인 sqlcmd
경우 종료하고 메시지 ID를 클라이언트로 다시 반환합니다. 예시:
RAISERROR(50001, 10, 127)
이 오류가 발생하면 sqlcmd
스크립트가 종료되고 메시지 ID 50001이 클라이언트에 반환됩니다.
반환 값 -1 ~ -99는 SQL Server에서 예약합니다. sqlcmd
는 다음과 같은 추가 반환 값을 정의합니다.
반환 값 | 설명 |
---|---|
-100 | 반환 값을 선택하기 전에 오류가 발생했습니다. |
-101 | 반환 값을 선택할 때 행을 찾을 수 없습니다. |
-102 | 반환 값을 선택할 때 변환 오류가 발생했습니다. |
GO [개수]
GO는 배치의 끝과 캐시된 Transact-SQL 문의 실행을 모두 신호로 표시합니다. 개수 값을 지정할 때 캐시된 문은 단일 일괄 처리로 실행됩니다.
기타 명령
:r < 파일 이름 >
**<filename
>**로 지정된 파일의 추가 Transact-SQL 문 및 sqlcmd
명령을 문 캐시로 구문 분석합니다.
파일에 Transact-SQL 문이 포함되어 있고 뒤에 GO가 오지 않을 경우 :r 뒤에 오는 줄에 GO를 입력해야 합니다.
참고 항목
<파일 > 는 실행된 sqlcmd
시작 디렉터리를 기준으로 읽습니다.
배치 종결자가 발생한 후 파일을 읽고 실행합니다. 여러 :r 명령을 실행할 수 있습니다. 파일에는 모든 명령이 sqlcmd
포함될 수 있습니다. 여기에는 일괄 처리 종결자 GO가 포함됩니다.
참고 항목
대화형 모드로 표시되는 줄 수는 발생한 모든 :r 명령에 대해 하나씩 증가합니다. :r 명령은 list 명령의 출력에 표시됩니다.
:Serverlist
로컬로 구성된 서버와 네트워크에서 브로드캐스팅 중인 서버의 이름을 나열합니다.
:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P 암호]]
SQL Server 인스턴스에 연결합니다. 또한 현재 연결을 종료합니다.
제한 시간 옵션:
0 | 무기한 대기 |
n>0 | n초 동안 대기 |
SQLCMDSERVER 스크립팅 변수는 현재 활성 연결을 반영합니다.
시간 제한을 지정하지 않으면 SQLCMDLOGINTIMEOUT 변수의 값이 기본값입니다.
옵션이나 환경 변수로 user_name 만 지정하면 사용자에게 암호를 입력하라는 메시지가 표시됩니다. SQLCMDUSER 또는 SQLCMDPASSWORD 환경 변수가 설정된 경우에는 그렇지 않습니다. 옵션이나 환경 변수가 제공되지 않으면 Windows 인증 모드를 사용하여 로그인합니다. 예를 들어 통합 보안을 사용하여 SQL Server의 인스턴스 instance1
에 myserver
연결하려면 다음을 사용합니다.
:connect myserver\instance1
스크립팅 변수를 사용하여 myserver
의 기본 인스턴스에 연결하려면 다음을 사용합니다.
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:] !!<명령>
운영 체제 명령을 실행합니다. 운영 체제 명령을 실행하려면 두 개의 느낌표(!!) 뒤에 운영 체제 명령이 있는 줄을 시작합니다. 예시:
:!! Dir
참고 항목
이 명령은 실행 중인 sqlcmd
컴퓨터에서 실행됩니다.
:XML [ON | OFF]
자세한 내용은 이 항목의 뒷부분에 나오는 "XML 출력 형식"을 참조하십시오.
도움말:
sqlcmd
명령과 각 명령에 대한 간단한 설명을 표시합니다.
sqlcmd 파일 이름
sqlcmd
입력 파일은 -i 옵션 또는 :r 명령을 사용하여 지정할 수 있습니다. 출력 파일은 -o 옵션 또는 :Error, :Out 및 :Perftrace 명령을 사용하여 지정할 수 있습니다. 다음은 이러한 파일 작업과 관련한 몇 가지 지침입니다.
:Error, :Out 및 :P erftrace 는 별도로 <
filename
>사용해야 합니다. 동일한 <filename
> 것을 사용하는 경우 명령의 입력이 섞일 수 있습니다.원격 서버에 있는 입력 파일이 로컬 컴퓨터에서
sqlcmd
호출되고 파일에 :out c:\OutputFile.txt 같은 드라이브 파일 경로가 포함된 경우 출력 파일은 원격 서버가 아닌 로컬 컴퓨터에 만들어집니다.유효한 파일 경로에는 C:\<
filename
>, \\<Server>\<Share$>\<filename
> 및 "C:\Some Folder\<file name
>"가 포함됩니다. 경로에 공백이 있는 경우 따옴표를 사용합니다.각 새
sqlcmd
세션은 이름이 같은 기존 파일을 덮어씁니다.
정보 메시지
sqlcmd
는 서버에서 보낸 모든 정보 메시지를 출력합니다. 다음 예에서는 Transact-SQL 문을 실행한 후 정보 메시지가 출력됩니다.
명령 프롬프트에 다음을 입력합니다.
sqlcmd
At the sqlcmd prompt type:
USE AdventureWorks2012;
GO
Enter 키를 누르면 다음 정보 메시지가 출력됩니다. "데이터베이스 컨텍스트가 'AdventureWorks2012'로 변경되었습니다."
Transact-SQL 쿼리의 출력 형식
먼저 sqlcmd
는 SELECT 목록에서 지정한 열 이름이 포함된 열 머리글을 출력합니다. 열 이름은 SQLCMDCOLSEP 문자로 구분됩니다. 기본적으로 구분 문자는 공백입니다. 열 이름이 열 너비보다 짧은 경우 출력은 다음 열까지 공백으로 채워집니다.
이 줄 뒤에는 일련의 대시 문자인 구분선이 잇습니다. 다음은 출력 예제입니다.
sqlcmd
를 시작합니다. sqlcmd
명령 프롬프트에서 다음을 입력합니다.
USE AdventureWorks2012;
SELECT TOP (2) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Enter 키를 누르면 다음 결과 집합이 반환됩니다.
BusinessEntityID FirstName LastName
---------------- ------------ ----------
285 Syed Abbas
293 Catherine Abel
(2 row(s) affected)
열 너비는 BusinessEntityID
4자일 뿐이지만 더 긴 열 이름을 수용하도록 확장되었습니다. 기본적으로 출력은 80자에서 종료됩니다. -w 옵션을 사용하거나 SQLCMDCOLWIDTH 스크립팅 변수를 설정하여 변경할 수 있습니다.
XML 출력 형식
FOR XML 절의 결과인 XML 출력은 연속 스트림의 형식이 지정되지 않은 출력입니다.
XML 출력이 예상되면 :XML ON
명령을 사용합니다.
참고 항목
sqlcmd
는 일반적인 형식의 오류 메시지를 반환합니다. 오류 메시지는 XML 형식의 XML 텍스트 스트림에도 출력됩니다. :XML ON
을 사용할 경우 sqlcmd
에서는 정보 메시지를 표시하지 않습니다.
XML 모드를 해제하려면 다음 명령을 :XML OFF
사용합니다.
XML OFF 명령이 행 지향 출력으로 다시 전환 sqlcmd
되므로 XML OFF 명령이 실행되기 전에 GO 명령이 표시되지 않아야 합니다.
XML(스트리밍) 데이터 및 행 집합 데이터는 혼합할 수 없습니다. XML 스트림을 출력하는 Transact-SQL 문이 실행되기 전에 XML ON 명령이 실행되지 않은 경우 출력이 왜곡됩니다. XML ON 명령이 실행된 경우 일반 행 집합을 출력하는 Transact-SQL 문을 실행할 수 없습니다.
참고 항목
:XML 명령은 SET STATISTICS XML 문을 지원하지 않습니다.
sqlcmd 모범 사례
보안 및 효율성을 극대화하려면 다음 방법을 사용하십시오.
통합 보안을 사용합니다.
자동화된 환경에서
-X
를 사용합니다.적절한 NTFS 파일 시스템 권한을 사용하여 입력 및 출력 파일을 보호합니다.
성능을 향상시키려면 일련의 세션 대신 한
sqlcmd
세션에서 최대한 많은 작업을 수행합니다.배치 또는 쿼리 실행에 대한 제한 시간 값을 배치 또는 쿼리 실행에 예상되는 값보다 높게 설정합니다.
참고 항목
sqlcmd 유틸리티 시작
sqlcmd를 사용하여 Transact-SQL 스크립트 파일 실행
sqlcmd 유틸리티 사용
스크립팅 변수와 함께 sqlcmd 사용
sqlcmd를 사용하여 데이터베이스 엔진에 연결
쿼리 편집기로 SQLCMD 스크립트 편집
작업 단계 관리
CmdExec 작업 단계 만들기