다음을 통해 공유


sqlcmd 유틸리티

업데이트: 2006년 7월 17일

sqlcmd 유틸리티를 사용하면 명령 프롬프트, SQLCMD 모드의 쿼리 편집기, Windows 스크립트 파일 또는 SQL Server 에이전트 작업의 운영 체제(Cmd.exe) 작업 단계에서 Transact-SQL 문, 시스템 프로시저 및 스크립트 파일을 입력할 수 있습니다. 이 유틸리티는 OLE DB를 사용하여 Transact-SQL 일괄 처리를 실행합니다.

ms162773.note(ko-kr,SQL.90).gif중요:
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 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 기존 osql 스크립트를 계속 사용할 수 있습니다.

    -U 옵션 또는 -P 옵션을 지정하지 않으면 sqlcmd가 Microsoft Windows 인증 모드를 사용하여 연결을 시도합니다. 인증은 sqlcmd를 실행하는 사용자의 Windows 계정에 기반합니다.

    이 항목의 뒷부분에 설명되어 있는 -E 옵션과 함께 -U 옵션을 사용하면 오류 메시지가 생성됩니다. -U 옵션 다음에 둘 이상의 인수를 지정하면 오류 메시지가 생성되고 프로그램이 종료됩니다.

  • -Ppassword
    사용자가 지정하는 암호입니다. 암호는 대/소문자를 구분합니다. -U 옵션을 사용하고 -P 옵션을 사용하지 않으며 SQLCMDPASSWORD 환경 변수를 설정하지 않을 경우 sqlcmd는 암호를 묻는 메시지를 표시합니다. 암호를 입력하지 않고 명령 프롬프트의 마지막에 -P 옵션을 사용하면 sqlcmd는 기본 암호 NULL을 사용합니다.

    ms162773.security(ko-kr,SQL.90).gif보안 정보:
    빈 암호를 사용하지 마십시오. 강력한 암호를 사용하십시오. 자세한 내용은 강력한 암호를 참조하십시오.

    암호 프롬프트는 다음과 같이 콘솔에 출력되어 표시됩니다. Password:

    사용자 입력은 숨겨지므로 아무 것도 표시되지 않고 커서가 해당 위치에 그대로 남아 있습니다.

    SQLCMDPASSWORD 환경 변수를 사용하면 현재 세션에 대한 기본 암호를 설정할 수 있습니다. 그러므로 암호를 배치 파일로 하드 코딩할 필요가 없습니다.

    다음 예에서는 먼저 명령 프롬프트에서 SQLCMDPASSWORD 변수를 설정하고 sqlcmd 유틸리티에 액세스합니다. 명령 프롬프트에서 다음을 입력합니다.

    SET SQLCMDPASSWORD= p@a$$w0rd

    ms162773.security(ko-kr,SQL.90).gif보안 정보:
    컴퓨터 모니터에서 누구나 암호를 볼 수 있습니다.

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

    sqlcmd

    사용자 이름과 암호가 잘못된 경우 OLE DB 공급자는 오류 메시지를 생성합니다.

    [!참고] OSQLPASSWORD 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDPASSWORD 환경 변수는 OSQLPASSWORD 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 이전 스크립트를 계속 사용할 수 있습니다.

    -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 환경 변수보다 우선적으로 적용됩니다. 그러므로 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 이전 스크립트를 계속 사용할 수 있습니다.

  • -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;"

    ms162773.note(ko-kr,SQL.90).gif중요:
    쿼리에 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;"

    ms162773.note(ko-kr,SQL.90).gif중요:
    쿼리에 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 명령에 대해서는 이 항목의 뒷부분에서 설명합니다.

    ms162773.note(ko-kr,SQL.90).gif중요:
    -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입니다.

변수 우선 순위(낮은 순위에서 높은 순위)

  1. 시스템 수준 환경 변수
  2. 사용자 수준 환경 변수
  3. sqlcmd를 실행하기 전에 명령 프롬프트에서 설정한 명령 셸(SET X=Y)
  4. sqlcmd-v X=Y
  5. :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 명령에는 접두사로 콜론(:)을 붙여야 합니다.
    ms162773.note(ko-kr,SQL.90).gif중요:
    기존 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 스트림으로 전환합니다. 스트림을 리디렉션할 경우 리디렉션된 스트림 대상이 오류 출력을 받습니다.
  • :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)

도움말 및 정보

SQL Server 2005 지원 받기