sqlcmd 유틸리티
업데이트: 2006년 7월 17일
sqlcmd 유틸리티를 사용하면 명령 프롬프트, SQLCMD 모드의 쿼리 편집기, Windows 스크립트 파일 또는 SQL Server 에이전트 작업의 운영 체제(Cmd.exe) 작업 단계에서 Transact-SQL 문, 시스템 프로시저 및 스크립트 파일을 입력할 수 있습니다. 이 유틸리티는 OLE DB를 사용하여 Transact-SQL 일괄 처리를 실행합니다.
중요: |
---|
SQL Server Management Studio에서는 쿼리 편집기의 일반 및 SQLCMD 모드에서 실행하기 위해 Microsoft .NET Framework SqlClient를 사용합니다. 명령줄에서 sqlcmd를 실행하는 경우 sqlcmd는 OLE DB 공급자를 사용합니다. 서로 다른 기본 옵션이 적용될 수 있으므로 SQL Server Management Studio SQLCMD 모드 및 sqlcmd 유틸리티에서 동일한 쿼리를 실행할 때 다른 동작이 수행될 수 있습니다. |
구문
sqlcmd
[{ { -U login_id [ -P password ] } | –E trusted connection }]
[ -z new password ] [ -Z new password and exit]
[ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection ]
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output ] [ -r [ 0 | 1 ] msgs to stderr ]
[ -R use client regional settings ]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit ]
[ -e echo input ] [ -t query time_out ]
[ -I enable Quoted Identifiers ]
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ]
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ]
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort ] [ -V severitylevel ] [ -m error_level ]
[ -a packet_size ][ -c cmd_end ]
[ -L [ c ] list servers[clean output] ]
[ -p [ 1 ] print statistics[colon format] ]
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit]
[ -? show syntax summary ]
명령줄 옵션
- 로그인 관련 옵션
-Ulogin_id
사용자 로그인 ID입니다.[!참고] OSQLUSER 환경 변수는 이전 버전과의 호환성을 위해 제공됩니다. SQLCMDUSER 환경 변수는 OSQLUSER 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmd와 osql을 문제 없이 함께 사용할 수 있으며 기존 osql 스크립트를 계속 사용할 수 있습니다.
-U 옵션 또는 -P 옵션을 지정하지 않으면 sqlcmd가 Microsoft Windows 인증 모드를 사용하여 연결을 시도합니다. 인증은 sqlcmd를 실행하는 사용자의 Windows 계정에 기반합니다.
이 항목의 뒷부분에 설명되어 있는 -E 옵션과 함께 -U 옵션을 사용하면 오류 메시지가 생성됩니다. -U 옵션 다음에 둘 이상의 인수를 지정하면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-Ppassword
사용자가 지정하는 암호입니다. 암호는 대/소문자를 구분합니다. -U 옵션을 사용하고 -P 옵션을 사용하지 않으며 SQLCMDPASSWORD 환경 변수를 설정하지 않을 경우 sqlcmd는 암호를 묻는 메시지를 표시합니다. 암호를 입력하지 않고 명령 프롬프트의 마지막에 -P 옵션을 사용하면 sqlcmd는 기본 암호 NULL을 사용합니다.보안 정보: 빈 암호를 사용하지 마십시오. 강력한 암호를 사용하십시오. 자세한 내용은 강력한 암호를 참조하십시오. 암호 프롬프트는 다음과 같이 콘솔에 출력되어 표시됩니다.
Password:
사용자 입력은 숨겨지므로 아무 것도 표시되지 않고 커서가 해당 위치에 그대로 남아 있습니다.
SQLCMDPASSWORD 환경 변수를 사용하면 현재 세션에 대한 기본 암호를 설정할 수 있습니다. 그러므로 암호를 배치 파일로 하드 코딩할 필요가 없습니다.
다음 예에서는 먼저 명령 프롬프트에서 SQLCMDPASSWORD 변수를 설정하고 sqlcmd 유틸리티에 액세스합니다. 명령 프롬프트에서 다음을 입력합니다.
SET SQLCMDPASSWORD= p@a$$w0rd
보안 정보: 컴퓨터 모니터에서 누구나 암호를 볼 수 있습니다. 명령 프롬프트에서 다음을 입력합니다.
sqlcmd
사용자 이름과 암호가 잘못된 경우 OLE DB 공급자는 오류 메시지를 생성합니다.
[!참고] OSQLPASSWORD 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDPASSWORD 환경 변수는 OSQLPASSWORD 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmd와 osql을 문제 없이 함께 사용할 수 있으며 이전 스크립트를 계속 사용할 수 있습니다.
-E 옵션과 함께 -P 옵션을 사용하면 오류 메시지가 생성됩니다.
-P 옵션 다음에 둘 이상의 인수를 지정하면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-E trusted connection
사용자 이름과 암호를 사용하는 대신 트러스트된 연결을 사용하여 SQL Server에 로그온합니다. -E를 지정하지 않으면 sqlcmd는 기본적으로 트러스트된 연결 옵션을 사용합니다.-E 옵션은 SQLCMDPASSWORD 등의 가능한 사용자 이름 및 암호 환경 변수 설정을 무시합니다. -U 옵션 또는 -P 옵션과 함께 -E 옵션을 사용하면 오류 메시지가 생성됩니다.
-z new password
암호를 변경합니다.sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
-Z new password and exit
암호 변경 후 종료합니다.sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
-Sserver_name [ **\**instance_name ]
연결할 SQL Server 인스턴스를 지정합니다. sqlcmd 스크립팅 변수 SQLCMDSERVER를 설정합니다.해당 서버 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결하려면 server_name을 지정합니다. 해당 서버 컴퓨터에 있는 명명된 SQL Server 인스턴스에 연결하려면 server_name [ **\**instance_name ]을 지정합니다. 서버 컴퓨터를 지정하지 않으면 sqlcmd가 로컬 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결됩니다. 네트워크의 원격 컴퓨터에서 sqlcmd를 실행할 때 이 옵션을 반드시 지정해야 합니다.
sqlcmd를 시작할 때 server_name [ **\**instance_name ]을 지정하지 않으면 SQL Server에서 SQLCMDSERVER 환경 변수를 확인 후 사용합니다.
[!참고] OSQLSERVER 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDSERVER 환경 변수는 OSQLSERVER 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmd와 osql을 문제 없이 함께 사용할 수 있으며 이전 스크립트를 계속 사용할 수 있습니다.
- -Hwksta_name
워크스테이션 이름입니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDWORKSTATION을 설정합니다. 워크스테이션 이름은 sys.dm_exec_sessions 동적 관리 뷰의 host_name 열에 나열되거나 저장 프로시저 sp_who를 사용하여 반환할 수 있습니다. 이 옵션을 지정하지 않으면 기본적으로 현재 컴퓨터 이름이 사용됩니다. 이 이름을 사용하여 다른 sqlcmd 세션을 식별할 수 있습니다.
- -ddb_name
sqlcmd를 시작할 때USE
db_name 문을 실행합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDDBNAME을 설정합니다. 이 변수는 초기 데이터베이스를 지정합니다. 기본값은 사용자 로그인의 기본 데이터베이스 속성입니다. 데이터베이스가 없을 경우 오류 메시지가 생성되고 sqlcmd가 종료됩니다.
- -llogintime_out
서버에 연결을 시도할 때 OLE DB 공급자에 대한 sqlcmd 로그인 제한 시간(초)을 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDLOGINTIMEOUT을 설정합니다. 기본 sqlcmd 로그인 제한 시간은 8초입니다. 로그인 제한 시간은 0에서 65534 사이의 숫자여야 합니다. 입력한 값이 숫자가 아니거나 이 범위에 속하지 않을 경우 sqlcmd는 오류 메시지를 생성합니다. 값을 0으로 설정하면 제한 시간이 없습니다.
- -A dedicated admin connection
DAC(관리자 전용 연결)를 사용하여 SQL Server에 로그인합니다. 이 연결 유형은 서버 문제를 해결하는 데 사용됩니다. 이 연결은 DAC를 지원하는 서버 컴퓨터에만 사용할 수 있습니다. DAC를 사용할 수 없는 경우 sqlcmd는 오류 메시지를 생성하고 종료됩니다. DAC에 대한 자세한 내용은 전용 관리자 연결 사용을 참조하십시오.
- 입/출력 옵션
-i input_file[***,***input_file2...]
SQL 문 또는 저장 프로시저의 일괄 처리가 포함된 파일을 나타냅니다. 순서대로 읽고 처리할 파일을 여러 개 지정할 수 있습니다. 파일 이름 사이에 공백을 넣지 마십시오. 먼저 sqlcmd는 지정한 모든 파일이 있는지 확인합니다. 하나 이상의 파일이 없을 경우 sqlcmd가 종료됩니다. -i 옵션과 -Q/-q 옵션은 함께 사용할 수 없습니다.경로 예는 다음과 같습니다.
-i C:\<filename>,
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
공백이 포함된 파일 경로는 따옴표로 묶어야 합니다.
이 옵션은 여러 번 사용될 수 있습니다(예: -i input_file -i I input_file.).
-ooutput_file
sqlcmd에서 출력을 받는 파일을 나타냅니다.-u를 지정하면 output_file이 유니코드 형식으로 저장됩니다. 파일 이름이 잘못된 경우 오류 메시지가 생성되고 sqlcmd가 종료됩니다. sqlcmd는 여러 sqlcmd 프로세스를 같은 파일에 동시에 쓸 수 없습니다. 이 경우 파일 출력이 손상되거나 제대로 수행되지 않습니다. 파일 형식에 대한 자세한 내용은 -f 스위치를 참조하십시오. 이 파일은 없는 경우 생성됩니다. 이전 sqlcmd 세션에서와 이름이 같은 파일은 덮어쓰여집니다. 여기에 지정된 파일은 stdout 파일이 아닙니다. stdout 파일이 지정된 경우에는 이 파일이 사용되지 않습니다.
경로 예는 다음과 같습니다.
-o C:\< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
공백이 포함된 파일 경로는 따옴표로 묶어야 합니다.
-f < codepage > | i: < codepage > [ <, o: < codepage > ]
입력 및 출력 코드 페이지를 지정합니다. 코드 페이지 번호는 설치된 Windows 코드 페이지를 지정하는 숫자 값입니다. 자세한 내용은 설치 프로그램에서 데이터 정렬 설정을 참조하십시오.코드 페이지 변환 규칙은 다음과 같습니다.
- 변환이 필요 없는 유니코드 파일이 입력 파일로 사용된 경우가 아니라면 sqlcmd는 지정된 코드 페이지가 없는 경우 입력 파일과 출력 파일에 현재 코드 페이지를 사용합니다.
- sqlcmd는 Big-Endian 및 Little-Endian 유니코드 입력 파일을 모두 자동으로 인식합니다. -u 옵션이 지정된 경우 출력은 항상 Little-Endian 유니코드가 됩니다.
- 지정된 출력 파일이 없는 경우 출력 코드 페이지는 콘솔 코드 페이지가 됩니다. 이 경우 출력이 콘솔에 올바르게 표시됩니다.
- 여러 입력 파일이 있는 경우 동일한 코드 페이지를 사용하는 것으로 간주됩니다. 유니코드 및 비유니코드 입력 파일을 함께 사용할 수 있습니다.
명령 프롬프트에서 chcp를 입력하여 Cmd.exe의 코드 페이지를 확인합니다.
- -u unicode output
input_file의 형식에 관계없이 output_file이 유니코드 형식으로 저장되도록 지정합니다.
- -r [ 0 | 1] msgs to stderr
오류 메시지 출력을 화면으로 리디렉션합니다(stderr). 매개 변수를 지정하지 않거나 0을 지정하면 심각도가 11 이상인 오류 메시지만 리디렉션됩니다. 1을 지정하면 PRINT를 포함하는 모든 오류 메시지 출력이 리디렉션됩니다. -o를 사용할 경우 아무 효과도 없습니다. 기본적으로 메시지는 stdout으로 전송됩니다.
- -R use client regional settings
통화, 날짜 및 시간 데이터를 문자 데이터로 변환할 때 SQL Server OLE DB 공급자에서 클라이언트의 국가별 설정을 사용하도록 설정합니다. 기본값은 서버 국가별 설정입니다.
- 쿼리 실행 옵션
-q" cmdline query "
sqlcmd가 시작될 때 쿼리를 실행하지만 쿼리 실행이 완료되더라도 sqlcmd를 종료하지 않습니다. 세미콜론으로 구분된 여러 쿼리를 실행할 수 있습니다. 다음 예와 같이 쿼리를 따옴표로 묶습니다.명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks -q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks -q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"
중요: 쿼리에 GO 종결자를 사용하지 마십시오. 이 옵션과 함께 -b를 지정하면 sqlcmd에 오류가 발생하여 종료됩니다. -b에 대해서는 이 항목의 뒷부분에서 설명합니다.
**-Q"**cmdline query " and exit
sqlcmd가 시작될 때 쿼리를 실행한 다음 바로 sqlcmd를 종료합니다. 세미콜론으로 구분된 여러 쿼리를 실행할 수 있습니다.다음 예와 같이 쿼리를 따옴표로 묶습니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks -Q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks -Q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"
중요: 쿼리에 GO 종결자를 사용하지 마십시오. 이 옵션과 함께 -b를 지정하면 sqlcmd에 오류가 발생하여 종료됩니다. -b에 대해서는 이 항목의 뒷부분에서 설명합니다.
- -e echo input
표준 출력 장치(stdout)에 입력 스크립트를 기록합니다.
- -I enable Quoted Identifiers
SET QUOTED_IDENTIFIER 연결 옵션을 ON으로 설정합니다. 기본적으로 OFF로 설정되어 있습니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하십시오.
-tquerytime_out
명령 또는 SQL 문 제한 시간(초)을 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDSTATTIMEOUT을 설정합니다. time_out 값을 지정하지 않으면 명령이 무기한 실행됩니다. querytime_out은 1에서 65535 사이의 숫자여야 합니다. 입력한 값이 숫자가 아니거나 이 범위에 속하지 않는 경우 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 disable variable substitution
sqlcmd에서 스크립팅 변수를 무시하도록 합니다. 이는 $(variable_name) 등을 비롯한 일반 변수와 형식이 같은 문자열이 포함되어 있을 수 있는 INSERT 문이 스크립트에 많이 포함된 경우에 유용합니다.
- 서식 옵션
- -hheaders
열 머리글 사이에 출력할 행의 수를 지정합니다. 기본적으로 각 쿼리 결과 집합마다 머리글을 한 번 출력합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDHEADERS를 설정합니다. 머리글을 출력하지 않으려면 -1을 사용합니다. 잘못된 값을 지정하면 sqlcmd가 오류 메시지를 생성하고 종료됩니다.
- -Scol_separator
열 구분 기호 문자를 지정합니다. 기본값은 공백입니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDCOLSEP을 설정합니다. 앰퍼샌드(&)나 세미콜론(;)과 같이 운영 체제에서 특별한 의미를 갖는 문자를 사용하려면 해당 문자를 따옴표(")로 묶습니다. 열 구분 기호로 임의의 8비트 문자를 사용할 수 있습니다.
- -wcolumn_width
출력할 화면 너비를 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDCOLWIDTH를 설정합니다. 열 너비는 8보다 크고 65536보다 작은 숫자여야 합니다. 지정한 열 너비가 이 범위에 속하지 않을 경우 sqlcmd는 오류 메시지를 생성합니다. 기본 너비는 80자입니다. 출력 줄이 지정한 열 너비를 초과하면 다음 줄로 넘어갑니다.
- -W remove trailing spaces
이 옵션은 열에서 후행 공백을 제거합니다. 다른 응용 프로그램으로 내보낼 데이터를 준비하는 경우 -s 옵션과 함께 이 옵션을 사용합니다. -y 또는 -Y 옵션과는 함께 사용할 수 없습니다.
- -k [ 1 | 2 ] remove[replace] control characters
출력에서 탭이나 줄 바꿈 문자와 같은 모든 제어 문자를 제거합니다. 데이터를 반환할 때 열 서식은 유지됩니다. 1을 지정하면 제어 문자가 단일 공백으로 바뀝니다. 2를 지정하면 연속된 제어 문자가 단일 공백으로 바뀝니다.
-ydisplay_width
sqlcmd 스크립팅 변수 SQLCMDMAXVARTYPEWIDTH를 설정합니다. 기본값은 0(설정 안 함)입니다. 다음과 같은 가변 길이 데이터 형식에 대해 반환되는 문자 수를 제한합니다.- varchar(max)
- nvarchar(max)
- varbinary(max)
- xml
- UDT(사용자 정의 유형)
- text
- ntext
- image
[!참고] UDT는 구현에 따라 길이가 고정될 수 있습니다. 길이가 고정된 UDT의 길이가 display_width보다 짧으면 반환되는 UDT 값은 영향을 받지 않습니다. 그러나 길이가 display_width보다 길면 출력이 잘립니다.
display_width가 0인 경우 1MB에서 출력이 잘립니다. :XML ON 명령을 사용하여 출력이 잘리지 않도록 방지할 수 있습니다. :XML ON 명령에 대해서는 이 항목의 뒷부분에서 설명합니다.
중요: -y 0 옵션은 반환되는 데이터 크기에 따라 서버와 네트워크 모두에서 심각한 성능 문제를 일으킬 수 있으므로 사용 시 매우 주의해야 합니다.
-Ydisplay_width
sqlcmd 스크립팅 변수 SQLCMDMAXFIXEDTYPEWIDTH를 설정합니다. 기본값은 256입니다. 다음 데이터 형식에 대해 반환되는 문자 수를 제한합니다.- char - 여기서 n의 범위는 1<n<8000입니다.
- nchar - 여기서 n의 범위는 1<n<4000입니다.
- varchar(n) - 여기서 n의 범위는 1<n<8000입니다.
- nvarchar(n) - 여기서 n의 범위는 1<n<4000입니다.
- varbinary(n) - 여기서 n의 범위는 1<n<8000입니다.
- sql_variant
- 오류 보고 옵션
-b on error batch abort
오류가 발생하면 sqlcmd를 끝내고 DOS ERRORLEVEL 값을 반환하도록 지정합니다. SQL Server 오류 메시지의 심각도가 10보다 큰 경우 DOS ERRORLEVEL 변수로 1이 반환되며 심각도가 10보다 작거나 같은 경우 0이 반환됩니다. -b 외에도 -V 옵션을 설정한 경우 심각도가 -V를 사용하여 설정한 값보다 작으면 sqlcmd는 오류를 보고하지 않습니다. 명령 프롬프트 배치 파일은 ERRORLEVEL 값을 테스트하고 그에 따라 적절히 오류를 처리할 수 있습니다. sqlcmd는 심각도가 10(정보 메시지)인 오류는 보고하지 않습니다.sqlcmd 스크립트에 잘못된 설명 또는 구문 오류가 포함되었거나 스크립팅 변수가 없을 경우 반환되는 ERRORLEVEL은 1입니다.
- -V severitylevel
sqlcmd가 보고하는 가장 낮은 심각도를 지정합니다. Transact-SQL 스크립트에서 오류가 발생할 경우 심각도가 -V 스위치로 지정한 값보다 크거나 같은 경우에만 심각도가 보고됩니다. 심각도가 지정한 값보다 작으면 0이 보고됩니다. 기본 오류 수준은 0입니다. 명령 프롬프트 배치 파일은 ERRORLEVEL 값을 테스트하고 그에 따라 적절히 오류를 처리할 수 있습니다.
-merror_level
오류 메시지 표시를 사용자 지정합니다. 지정한 심각도 이상의 오류에 대한 메시지 번호, 상태 및 오류 수준이 표시됩니다. 지정한 심각도 이하의 오류에 대해서는 정보를 표시하지 않습니다. -1을 사용하여 모든 머리글을 메시지(정보 메시지도 포함)와 함께 반환합니다. -1을 지정하는 경우 -m-1이 아니라 -m-1과 같이 매개 변수와 설정 사이에 공백이 없어야 합니다.이 옵션은 기본값이 0인 sqlcmd 스크립팅 변수 SQLCMDERRORLEVEL을 설정합니다.
- 기타 옵션
- -apacket_size
다른 크기의 패킷을 요청합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDPACKETSIZE를 설정합니다. packet_size는 512에서 32767 사이의 값이어야 합니다. 기본값은 4096입니다. GO 명령 사이에 SQL 문 수가 많은 스크립트를 실행할 때는 패킷 크기가 클수록 성능이 더 향상됩니다. 더 큰 패킷 크기를 요청할 수 있습니다. 그러나 요청이 거부되면 sqlcmd는 서버 기본값을 패킷 크기로 사용합니다.
- -ccmd_end
일괄 처리 종결자를 지정합니다. 기본적으로 줄에 "GO"만 단독으로 입력하면 명령이 종료되어 SQL Server로 보내집니다. 일괄 처리 종결자를 다시 설정할 때는 앞에 백슬래시가 있더라도 Transact-SQL 예약 키워드 또는 운영 체제와 연관된 특별한 의미를 가진 문자를 사용하지 마십시오.
-L [ c ] list servers[clean output]
로컬로 구성된 서버 컴퓨터와 네트워크상에서 브로드캐스팅하는 서버 컴퓨터의 이름을 표시합니다. 이 매개 변수는 다른 매개 변수와 함께 사용할 수 없습니다. 표시할 수 있는 최대 서버 컴퓨터 수는 3000대입니다. 버퍼 크기 때문에 서버 목록이 잘린 경우 경고 메시지가 표시됩니다.[!참고] 네트워크에서 브로드캐스팅의 특성으로 인해 sqlcmd는 모든 서버로부터 시기 적절한 응답을 받지 못할 수 있습니다. 그러므로 반환되는 서버 목록은 이 옵션을 호출할 때마다 다를 수 있습니다.
옵션 매개 변수 c를 지정하면 Servers: 머리글 없이 출력이 나타납니다. 그리고 각 서버 줄이 선행 공백 없이 나열됩니다. 이를 정리된 출력이라고 합니다. 정리된 출력은 스크립팅 언어의 처리 성능을 향상시킵니다.
-p [ 1 ] print statistics[colon format]
모든 결과 집합에 대한 성능 통계를 출력합니다. 다음은 성능 통계 형식의 예입니다.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 ] disable commands, startup script, enviroment variables [and exit]
배치 파일에서 sqlcmd를 실행할 때 시스템 보안을 손상시킬 수 있는 명령을 사용할 수 없게 설정합니다. 사용할 수 없게 설정된 명령은 여전히 인식되지만 sqlcmd는 경고 메시지를 표시하고 계속합니다. 옵션 매개 변수 1을 지정하면 sqlcmd는 오류 메시지를 생성하고 종료됩니다. -X 옵션을 사용하면 다음 명령이 사용할 수 없게 설정됩니다.- ED
- **!!**command
-X 옵션을 지정하면 환경 변수가 sqlcmd에 전달되지 않습니다. 또한 SQLCMDINI 스크립팅 변수를 사용하여 지정한 시작 스크립트가 실행되지 않습니다. sqlcmd 스크립팅 변수에 대한 자세한 내용은 스크립팅 변수와 함께 sqlcmd 사용을 참조하십시오.
- -? show syntax summary
sqlcmd 옵션의 구문 요약 정보를 표시합니다.
주의
옵션은 구문 섹션에 표시된 순서대로 사용하지 않아도 됩니다.
여러 결과가 반환된 경우 sqlcmd는 일괄 처리의 각 결과 집합 사이에 빈 줄을 출력합니다. 또한 실행되는 문에 적용되지 않을 때는 "<x>개 행 적용됨" 메시지가 나타나지 않습니다.
대화형으로 sqlcmd를 사용하려면 명령 프롬프트에 이 항목의 위에서 설명한 하나 이상의 옵션과 함께 sqlcmd를 입력합니다. 자세한 내용은 sqlcmd 유틸리티 사용을 참조하십시오.
[!참고] -L, -Q, -Z 또는 -i 옵션을 사용하면 실행 후 sqlcmd가 종료됩니다.
명령 환경(Cmd.exe)에서 모든 인수 및 확장 변수를 포함한 sqlcmd 명령줄의 총 길이는 Cmd.exe에 대한 운영 체제에 의해 결정되며 이는 운영 체제에 따라 다릅니다. Windows Server 2003 및 Windows XP의 경우 길이는 8191이고 Windows 2000 및 Windows NT4의 경우 길이는 2047입니다.
변수 우선 순위(낮은 순위에서 높은 순위)
- 시스템 수준 환경 변수
- 사용자 수준 환경 변수
- 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 명령
sqlcmd에서 Transact-SQL 문 외에도 다음 명령을 사용할 수 있습니다.
GO [count] |
:List |
[:] RESET |
:Error |
[:] ED |
:Out |
[:] !! |
:Perftrace |
[:] QUIT |
:Connect |
[:] EXIT |
:On Error |
:r |
:Help |
:ServerList |
:XML [ON | OFF] |
:Setvar |
:Listvar |
sqlcmd 명령을 사용할 때는 다음 사항에 주의하십시오.
- GO를 제외하고 모든 sqlcmd 명령에는 접두사로 콜론(:)을 붙여야 합니다.
중요: 기존 osql 스크립트와의 호환성을 유지하기 위해 일부 명령은 콜론 없이도 인식됩니다. 이러한 명령은 [:]으로 표시됩니다. - sqlcmd 명령은 줄 시작 부분에 나타난 경우에만 인식됩니다.
- 모든 sqlcmd 명령은 대/소문자를 구분하지 않습니다.
- 각 명령을 별도의 줄에 입력해야 합니다. 명령 다음에 Transact-SQL 문이나 다른 명령을 입력할 수 없습니다.
- 명령은 즉시 실행되며 문처럼 실행 버퍼에 포함되지 않습니다.
- 명령 편집
[:] ED
텍스트 편집기를 시작합니다. 이 편집기를 사용하여 현재 Transact-SQL 일괄 처리를 편집하거나 마지막으로 실행된 일괄 처리를 편집할 수 있습니다. 마지막으로 실행된 일괄 처리를 편집하려면 마지막 일괄 처리 실행을 마친 후 즉시 ED 명령을 입력해야 합니다.텍스트 편집기는 SQLCMDEDITOR 환경 변수에 의해 정의됩니다. 기본 편집기는 'Edit'입니다. 편집기를 변경하려면 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 명령을 사용하여 설정한 스크립팅 변수만 표시됩니다.
- 출력 명령
:Error **<filename>|STDERR|STDOUT
file name에 지정한 파일, stderr 또는 stdout으로 모든 오류 출력을 리디렉션합니다. 스크립트에서 Error 명령이 여러 번 나타날 수 있습니다. 기본적으로 오류 출력은 stderr로 전송됩니다.- file name
출력을 받을 파일을 만들고 엽니다. 이 파일이 이미 있을 경우 0바이트로 잘립니다. 권한이나 기타 이유로 인해 이 파일을 사용할 수 없을 경우 출력이 전환되지 않으며 마지막으로 지정한 대상이나 기본 대상으로 전송됩니다.
- STDERR
오류 출력을 stderr 스트림으로 전환합니다. 스트림을 리디렉션할 경우 리디렉션된 스트림 대상이 오류 출력을 받습니다.
- STDOUT
오류 출력을 stdout 스트림으로 전환합니다. 스트림을 리디렉션할 경우 리디렉션된 스트림 대상이 오류 출력을 받습니다.
- file name
- :Out <filename>| STDERR| STDOUT
쿼리 결과를 만들어 file name에 지정된 파일, stderr 또는 stdout으로 모두 리디렉션합니다. 기본적으로 출력은 stdout으로 전송됩니다. 이 파일이 이미 있을 경우 0바이트로 잘립니다. 스크립트에서 Out 명령이 여러 번 나타날 수 있습니다.
- :Perftrace <filename>| STDERR| STDOUT
성능 추적 정보를 만들어 file name에 지정된 파일, stderr 또는 stdout으로 모두 리디렉션합니다. 기본적으로 성능 추적 출력은 stdout으로 전송됩니다. 이 파일이 이미 있을 경우 0바이트로 잘립니다. 스크립트에서 Perftrace 명령이 여러 번 나타날 수 있습니다.
- 실행 제어 명령
:On Error[ exit| ignore]
스크립트나 일괄 처리를 실행하는 동안 오류가 발생할 때 수행할 작업을 설정합니다.exit 옵션을 사용하면 해당 오류 값이 표시되고 sqlcmd가 종료됩니다.
ignore 옵션을 사용하면 sqlcmd는 오류를 무시하고 일괄 처리 또는 스크립트를 계속 실행합니다. 기본적으로 오류 메시지가 출력됩니다.
- [:] QUIT
sqlcmd를 끝냅니다.
[:] EXIT[ (statement) ]
sqlcmd의 반환 값에 SELECT 문의 결과를 사용할 수 있도록 합니다. 첫째 결과 행의 첫째 열은 4바이트 정수(long)로 변환됩니다. MS-DOS는 하위 바이트를 부모 프로세스 또는 운영 체제 오류 수준에 전달합니다. Windows 2000에서는 4바이트 정수 전체를 전달합니다. 구문은 다음과 같습니다.:EXIT(query)
예를 들면 다음과 같습니다.
:EXIT(SELECT @@ROWCOUNT)
EXIT 매개 변수를 배치 파일의 일부로 포함할 수도 있습니다. 예를 들어 명령 프롬프트에서 다음을 입력합니다.
sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')"
sqlcmd 유틸리티는 괄호**()** 안에 입력된 모든 내용을 서버로 보냅니다. 시스템의 저장 프로시저가 설정을 선택하고 값을 반환하면 선택 내용만 반환됩니다. EXIT**()** 문의 괄호 사이에 아무 것도 없으면 일괄 처리에서 이 문 앞에 나오는 모든 문을 실행한 다음 값을 반환하지 않고 종료합니다.
잘못된 쿼리를 지정하면 sqlcmd는 값을 반환하지 않고 종료됩니다.
다음은 EXIT 형식의 목록입니다.
- :EXIT
일괄 처리를 실행하지 않고 즉시 종료하며 값을 반환하지 않습니다.
- :EXIT( )
일괄 처리를 실행한 다음 종료하며 값을 반환하지 않습니다.
- :EXIT(query)
쿼리를 포함하는 일괄 처리를 실행하며 쿼리 결과를 반환한 다음 종료합니다.
sqlcmd 스크립트 안에서 RAISERROR를 사용할 때 상태 127이 발생하면 sqlcmd가 종료되고 메시지 ID가 클라이언트에 반환됩니다. 예를 들면 다음과 같습니다.
RAISERROR(50001, 10, 127)
이 오류가 발생하면 sqlcmd 스크립트가 종료되고 메시지 ID 50001이 클라이언트에 반환됩니다.
-1부터 -99까지의 반환 값은 SQL Server에 예약되어 있으므로 sqlcmd는 다음과 같은 추가 반환 값을 정의합니다.
반환 값 설명 -100
반환 값을 선택하기 전에 오류가 발생했습니다.
-101
반환 값을 선택할 때 행을 찾을 수 없습니다.
-102
반환 값을 선택할 때 변환 오류가 발생했습니다.
- GO [count]
GO는 일괄 처리의 끝을 알려 주고 캐시된 Transact-SQL 문을 실행하도록 신호를 보냅니다. count 값을 지정하면 캐시된 문이 count에 지정한 횟수만큼 단일 일괄 처리로 실행됩니다.
- 기타 명령
:r<filename>
**<filename>****에 지정한 파일에서 추가 Transact-SQL 문과 sqlcmd 명령을 문 캐시로 구문 분석합니다.파일에 문이 포함되어 있고 뒤에 GO가 오지 않을 경우 :r 뒤에 오는 줄에 GO를 입력해야 합니다.
[!참고] <filename>은 sqlcmd를 실행한 시작 디렉터리를 기준으로 상대적으로 읽혀집니다.
일괄 처리 종결자가 나타난 후 이 파일이 읽혀지고 실행됩니다. 여러 :r 명령을 실행할 수 있습니다. 이 파일에는 모든 유형의 sqlcmd 명령이 포함될 수 있으며 그 예로 일괄 처리 종결자 GO를 들 수 있습니다.
[!참고] 대화형 모드에서 표시되는 줄 수는 :r 명령이 나타날 때마다 1씩 증가합니다. :r 명령은 목록 명령의 출력에 나타납니다.
- :Serverlist
로컬로 구성된 서버와 네트워크상에서 브로드캐스팅하는 서버의 이름을 표시합니다.
:Connect server_name[**\**instance_name] [-l timeout] [-U user_name [-P password]]
SQL Server 인스턴스에 연결합니다. 또한 현재 연결을 종료합니다.제한 시간 옵션은 다음과 같습니다.
0
무기한 대기
n>0
n초 동안 대기
SQLCMDSERVER 스크립팅 변수는 현재 활성 연결을 반영합니다.
timeout을 지정하지 않으면 기본적으로 SQLCMDLOGINTIMEOUT 변수 값이 사용됩니다.
옵션이나 환경 변수로 user_name만 지정하면 사용자에게 암호를 입력하라는 메시지가 표시됩니다. 이는 SQLCMDUSER 또는 SQLCMDPASSWORD 환경 변수를 설정한 경우 해당되지 않습니다. 옵션이나 환경 변수를 지정하지 않을 경우 로그인하는 데 Windows 인증 모드가 사용됩니다. 예를 들어 통합 보안을 사용하여 SQL Server
myserver
의 인스턴스인instance1
에 연결하려면 다음을 사용합니다.:connect myserver\instance1
스크립팅 변수를 사용하여
myserver
의 기본 인스턴스에 연결하려면 다음을 사용합니다.:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:] !!< command>
운영 체제 명령을 실행합니다. 운영 체제 명령을 실행하려면 느낌표 두 개(!!)로 줄을 시작하고 운영 체제 명령을 입력합니다. 예를 들면 다음과 같습니다.:!! Dir
[!참고] sqlcmd를 실행 중인 컴퓨터에서 명령이 실행됩니다.
- :XML [ON | OFF]
자세한 내용은 이 항목의 뒷부분에 나오는 "XML 출력 형식"을 참조하십시오.
- :Help
sqlcmd 명령과 각 명령에 대한 간단한 설명을 표시합니다.
sqlcmd 파일 이름
sqlcmd 입력 파일은 -i 옵션 또는 :r 명령을 사용하여 지정할 수 있습니다. 출력 파일은 -o 옵션 또는 :Error, :Out 및 :Perftrace 명령을 사용하여 지정할 수 있습니다. 다음은 이러한 파일 작업에 대한 지침입니다.
- :Error, :Out 및 :Perftrace는 별도의 **<filename>**을 사용해야 합니다. 동일한 **<filename>**을 사용하면 명령의 입력이 섞일 수 있습니다.
- 원격 서버에 있는 입력 파일을 로컬 컴퓨터에 있는 sqlcmd에서 호출할 경우 이 파일에 :out c:\OutputFile.txt와 같은 드라이브 파일 경로가 포함되어 있으면 출력 파일이 원격 서버가 아닌 로컬 컴퓨터에 생성됩니다.
- 올바른 파일 경로의 예는 C:\<filename>, \\<Server>\<Share$>\<filename> 및 "C:\Some Folder\<file name>"과 같습니다. 경로에 공백이 있을 경우 따옴표를 사용합니다.
- 각각의 새 sqlcmd 세션은 이름이 같은 기존 파일을 덮어씁니다.
정보 메시지
sqlcmd는 서버에서 보낸 모든 정보 메시지를 출력합니다. 다음 예에서는 Transact-SQL 문을 실행한 후 정보 메시지가 출력됩니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd
sqlcmd 명령 프롬프트에서 다음을 입력합니다.
USE AdventureWorks;
GO
Enter 키를 누르면 다음 정보 메시지가 출력됩니다. "데이터베이스 컨텍스트가 'AdventureWorks'(으)로 변경되었습니다."
Transact-SQL 쿼리의 출력 형식
먼저 sqlcmd는 SELECT 목록에서 지정한 열 이름이 포함된 열 머리글을 출력합니다. 열 이름은 SQLCMDCOLSEP 문자로 구분됩니다. 기본적으로 구분 문자는 공백입니다. 열 이름이 열 너비보다 짧은 경우 출력은 다음 열까지 공백으로 채워집니다.
이 줄 다음에는 대시 문자로 이루어진 구분선이 삽입됩니다. 다음은 출력의 예입니다.
sqlcmd를 시작합니다. sqlcmd 명령 프롬프트에서 다음을 입력합니다.
USE AdventureWorks;
SELECT TOP (2) Person.ContactID, FirstName, LastName
FROM Person.Contact;
GO
Enter 키를 누르면 다음 결과 집합이 반환됩니다.
ContactID FirstName LastName
----------- ------------ ----------
1 Syed Abbas
2 Catherine Abel
(2 row(s) affected)
ContactID
열의 너비는 4자이지만 보다 긴 열 이름을 포함할 수 있도록 확장되었습니다. 기본적으로 출력은 80자에서 끝납니다. 그러나 -w 옵션을 사용하거나 SQLCMDCOLWIDTH 스크립팅 변수를 설정하여 이 값을 변경할 수 있습니다.
XML 출력 형식
FOR XML 절의 결과로 나오는 XML 출력은 연속 스트림에서 형식이 지정되지 않은 출력입니다.
XML 출력을 원하는 경우에는 다음 명령을 사용합니다. :XML ON
.
[!참고] sqlcmd는 일반 형식으로 오류 메시지를 반환합니다. 오류 메시지는 XML 형식으로 XML 텍스트 스트림에도 출력됩니다.
:XML ON
을 사용할 경우 sqlcmd에서는 정보 메시지를 표시하지 않습니다.
XML 모드를 해제하려면 다음 명령을 사용합니다. :XML OFF
.
XML OFF 명령은 sqlcmd를 다시 행 기반 출력으로 전환하기 때문에 GO 명령이 나타난 다음에 XML OFF 명령을 실행해야 합니다.
스트림된 XML 데이터와 행 집합 데이터를 혼합할 수 없습니다. XML 스트림을 출력하는 Transact-SQL 문을 실행하기 전에 XML ON 명령을 실행하지 않은 경우 출력이 잘못됩니다. XML ON 명령을 실행한 경우 일반 행 집합을 출력하는 Transact-SQL 문을 실행할 수 없습니다.
[!참고] :XML 명령은 SET STATISTICS XML 문을 지원하지 않습니다.
sqlcmd를 위한 최선의 구현 방법
보안 및 효율성을 극대화하려면 다음 방법을 사용하십시오.
- 통합 보안을 사용합니다.
- 자동화된 환경에서 -X를 사용합니다.
- 적절한 NTFS 파일 시스템 권한을 사용하여 입력 및 출력 파일을 보호합니다.
- 성능을 향상시키려면 여러 세션 대신 한 번의 sqlcmd 세션에서 가능한 많은 작업을 수행합니다.
- 일괄 처리 또는 쿼리를 실행하는 데 걸리는 예상 시간보다 높은 제한 시간 값을 일괄 처리 또는 쿼리 실행에 대해 설정합니다.
참고 항목
관련 자료
sqlcmd 유틸리티 사용
스크립팅 변수와 함께 sqlcmd 사용
방법: sqlcmd.exe를 사용하여 데이터베이스 엔진에 연결
쿼리 편집기로 SQLCMD 스크립트 편집
sqlcmd 유틸리티 자습서
작업 단계 만들기
방법: CmdExec 작업 단계 만들기(SQL Server Management Studio)