sqlcmd 유틸리티
적용 대상:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System(PDW)
sqlcmd 유틸리티를 사용하면 다양한 모드를 통해 Transact-SQL 문, 시스템 프로시저 및 스크립트 파일을 입력할 수 있습니다.
- 명령 프롬프트에서.
- SQLCMD 모드의 쿼리 편집기.
- Windows 스크립트 파일에서
- SQL Server 에이전트 작업의 운영 체제(
cmd.exe
) 작업 단계에서
설치한 버전 확인
sqlcmd에는 두 가지 버전 이 있습니다.
SQL Server 또는 Microsoft 명령줄 유틸리티와 Linux 패키지의
mssql-tools
일부에서 사용할 수 있는 ODBC 기반 sqlcmd입니다.go-mssqldb
go-sqlcmd로 스타일이 지정된 -based sqlcmd입니다. 이 버전은 SQL Server와 독립적으로 다운로드할 수 있는 독립 실행형 도구입니다.
설치한 버전을 확인하려면 명령줄에서 다음 문을 실행합니다.
sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?
sqlcmd(ODBC)를 사용하는 경우 출력은 다음 예제와 유사합니다.
Microsoft (R) SQL Server Command Line Tool
Version 16.0.4025.1 NT
Copyright (C) 2022 Microsoft Corporation. All rights reserved.
버전 확인
컴퓨터에 여러 버전의 sqlcmd (ODBC)가 설치되어 있을 수 있습니다. 올바른 버전을 사용하고 있는지 확인합니다. 버전 15.0.4298.1 이상이 설치되어 있어야 합니다.
Always Encrypted(-g
) 및 Azure AD 인증(-G
)에는 버전 13.1 이상이 필요합니다.
참고 항목
SQL Server 2014(12.x) 및 이전 버전의 경우 sqlcmd 유틸리티를 참조하세요.
Linux에서 sqlcmd를 사용하려면 Linux에 sqlcmd 및 bcp 설치를 참조하세요.
Important
패키지 관리자를 통해 sqlcmd(Go)를 설치하면 ODBC(sqlcmd)가 환경 경로의 sqlcmd(Go)로 바뀝니다. 이 작업을 적용하려면 현재 명령줄 세션을 닫고 다시 열어야 합니다. sqlcmd (ODBC)는 제거되지 않으며 실행 파일의 전체 경로를 지정하여 계속 사용할 수 있습니다. 변수를 업데이트 PATH
하여 우선 순위를 지정할 수도 있습니다. Windows 11에서 이렇게 하려면 시스템 설정을 열고 고급 시스템 설정 정보 > 로 이동합니다. 시스템 속성이 열리면 환경 변수 단추를 선택합니다. 아래쪽 절반의 시스템 변수에서 경로를 선택한 다음 편집을 선택합니다. sqlcmd(Go)가 저장되는 위치(C:\Program Files\sqlcmd
기본값)가 앞에 C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn
나열된 경우 sqlcmd(Go)가 사용됩니다. ODBC(sqlcmd)를 다시 기본값으로 설정하도록 순서를 되돌릴 수 있습니다.
sqlcmd 다운로드 및 설치
sqlcmd (ODBC)는 Microsoft Windows, macOS 및 Linux에 플랫폼 간 설치할 수 있습니다.
Windows
SQL Server용 Microsoft 명령줄 유틸리티 15(x64) 다운로드
SQL Server용 Microsoft 명령줄 유틸리티 15(x86) 다운로드
명령줄 도구는 GA(일반 공급)되지만 SQL Server 2019(15.x)용 설치 관리자 패키지와 함께 릴리스됩니다.
버전 정보
- 릴리스 번호: 15.0.4298.1
- 빌드 번호: 15.0.4298.1
- 릴리스 날짜: 2023년 4월 7일
sqlcmd (ODBC)는 Azure SQL Database, Azure Synapse Analytics 및 Always Encrypted 기능에 대한 MFA(Multi-Factor Authentication) 지원을 포함하여 Azure AD(Azure Active Directory) 인증을 지원합니다.
시스템 요구 사항
- Windows 7 ~ Windows 11
- Windows Server 2008~ Windows Server 2022
이 구성 요소에는 기본 제공 Windows Installer 5 와 MICROSOFT ODBC Driver 17 for SQL Server가 모두 필요합니다.
Linux 및 macOS
Linux 및 macOS에 sqlcmd를 설치하는 지침은 Linux에 sqlcmd 및 bcp 설치를 참조하세요.
사전
Azure Cloud Shell
기본적으로 사전 설치되므로 Azure Cloud Shell에서 sqlcmd 유틸리티를 사용해 볼 수 있습니다.
Azure Data Studio
Azure Data Studio에서 SQLCMD 문을 실행하려면 편집기 도구 모음에서 SQLCMD 사용을 선택합니다.
SSMS(SQL Server Management Studio)
SSMS(SQL Server Management Studio)에서 SQLCMD 문을 실행하려면 위쪽 탐색 쿼리 메뉴 드롭다운 목록에서 SQLCMD 모드를 선택합니다.
SSMS는 쿼리 편집기 일반 및 SQLCMD 모드에서 실행하기 위해 Microsoft .NET Framework SqlClient
를 사용합니다. 명령줄에서 sqlcmd를 실행하는 경우 sqlcmd는 ODBC 드라이버를 사용합니다. 다른 기본 옵션이 적용될 수 있으므로 SQLCMD 모드 및 sqlcmd 유틸리티에서 SSMS에서 동일한 쿼리를 실행할 때 다른 동작이 표시될 수 있습니다.
구문
sqlcmd
-a packet_size
-A (dedicated administrator connection)
-b (terminate batch job if there is an error)
-c batch_terminator
-C (trust the server certificate)
-d db_name
-D
-e (echo input)
-E (use trusted connection)
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
-g (enable column encryption)
-G (use Azure Active Directory for authentication)
-h rows_per_header
-H workstation_name
-i input_file
-I (enable quoted identifiers)
-j (Print raw error messages)
-k[1 | 2] (remove or replace control characters)
-K application_intent
-l login_timeout
-L[c] (list servers, optional clean output)
-m error_level
-M multisubnet_failover
-N (encrypt connection)
-o output_file
-p[1] (print statistics, optional colon format)
-P password
-q "cmdline query"
-Q "cmdline query" (and exit)
-r[0 | 1] (msgs to stderr)
-R (use client regional settings)
-s col_separator
-S [protocol:]server[instance_name][,port]
-t query_timeout
-u (unicode output file)
-U login_id
-v var = "value"
-V error_severity_level
-w screen_width
-W (remove trailing spaces)
-x (disable variable substitution)
-X[1] (disable commands, startup script, environment variables, optional exit)
-y variable_length_type_display_width
-Y fixed_length_type_display_width
-z new_password
-Z new_password (and exit)
-? (usage)
현재 sqlcmd 에는 명령줄 옵션과 값 사이에 공백이 필요하지 않습니다. 하지만 후속 릴리스에서는 명령줄 옵션과 값 사이에 공백을 넣어야 할 수도 있습니다.
명령줄 옵션
로그인 관련 옵션
-A
전용 DAC(관리자 연결)를 사용하여 SQL Server에 로그인합니다. 이러한 종류의 연결은 서버 문제를 해결하는 데 사용됩니다. 이 연결은 DAC를 지원하는 서버 컴퓨터에서만 작동합니다. DAC를 사용할 수 없는 경우 sqlcmd 는 오류 메시지를 생성한 다음 종료합니다. DAC에 대한 자세한 내용은 데이터베이스 관리자를 위한 진단 연결을 참조하세요. 이 -A
옵션은 이 옵션에서 -G
지원되지 않습니다. Azure SQL Database를 사용하여 -A
연결할 때 논리 SQL 서버의 관리자여야 합니다. Azure AD 관리자는 DAC를 사용할 수 없습니다.
C-
이 옵션은 클라이언트에서 유효성 검사 없이 서버 인증서를 암시적으로 신뢰하도록 구성하는 데 사용됩니다. 이 옵션은 ADO.NET 옵션 TRUSTSERVERCERTIFICATE = true
과 동일합니다.
sqlcmd(Go) 유틸리티의 경우 다음 조건도 적용됩니다.
-C
제공되지 않은 경우-N
sqlcmd는 서버 인증서의 유효성을 검사하지 않고 서버와 인증을 협상합니다.- 제공되지만
-C
그렇지 않은 경우-N
sqlcmd에는 서버 인증서의 유효성 검사가 필요합니다. 암호화 값은false
여전히 로그인 패킷의 암호화로 이어질 수 있습니다. - 둘 다
-N
-C
제공된 경우 sqlcmd 는 암호화 협상에 해당 값을 사용합니다.
-d db_name
sqlcmd를 USE <db_name>
시작할 때 문을 실행합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDDBNAME
를 설정합니다. 이 매개 변수는 초기 데이터베이스를 지정합니다. 기본값은 로그인의 기본 데이터베이스 속성입니다. 데이터베이스가 없으면 오류 메시지가 생성되고 sqlcmd 가 종료됩니다.
-D
제공된 -S
서버 이름을 호스트 이름이 아닌 DSN으로 해석합니다. 자세한 내용은 sqlcmd를 사용하여 커넥트 sqlcmd 및 bcp의 DSN 지원을 참조하세요.
참고 항목
이 -D
옵션은 Linux 및 macOS 클라이언트에서만 사용할 수 있습니다. Windows 클라이언트에서는 이전에 제거되고 무시되는 사용되지 않는 옵션을 참조했습니다.
-l login_timeout
서버에 연결을 시도할 때 ODBC 드라이버에 대한 sqlcmd 로그인 시간 제한(초)을 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDLOGINTIMEOUT
를 설정합니다. sqlcmd에 로그인하기 위한 기본 제한 시간은 8초입니다. 이 옵션을 사용하여 -G
Azure SQL Database 또는 Azure Synapse Analytics에 연결하고 Azure AD를 사용하여 인증하는 경우 최소 30초의 시간 제한 값을 사용하는 것이 좋습니다. 로그인 제한 시간은 사이의 0
65534
숫자여야 합니다. 제공된 값이 숫자가 아니거나 해당 범위에 속하지 않으면 sqlcmd 에서 오류 메시지를 생성합니다. 값은 0
제한 시간을 무한으로 지정합니다.
E-
사용자 이름과 암호를 사용하여 SQL Server에 로그인하는 대신 신뢰할 수 있는 연결을 사용합니다. 기본적으로 sqlcmd는 지정하지 않고 -E
신뢰할 수 있는 연결 옵션을 사용합니다.
이 -E
옵션은 가능한 사용자 이름 및 암호 환경 변수 설정(예: .) SQLCMDPASSWORD
을 무시합니다. -E
옵션이 옵션 또는 -P
옵션과 -U
함께 사용되는 경우 오류 메시지가 생성됩니다.
있습니다.
열 암호화 설정을 .로 Enabled
설정합니다. 자세한 내용은 Always Encrypted를 참조하세요. Windows 인증서 저장소에 저장된 마스터 키만 지원됩니다. 이 -g
옵션을 사용하려면 sqlcmd 버전 13.1 이상이 필요합니다. 버전을 확인하려면 .를 실행 sqlcmd -?
합니다.
-G
이 옵션은 Azure SQL Database 또는 Azure Synapse Analytics에 연결할 때 클라이언트에서 Azure AD 인증을 사용하여 사용자를 인증하도록 지정하는 데 사용됩니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDUSEAAD = true
를 설정합니다. 이 -G
옵션을 사용하려면 sqlcmd 버전 13.1 이상이 필요합니다. 버전을 확인하려면 .를 실행 sqlcmd -?
합니다. 자세한 내용은 Azure Active Directory 인증을 사용하여 SQL Database 또는 Azure Synapse Analytics에 커넥트 참조하세요. 이 -A
옵션은 이 옵션에서 -G
지원되지 않습니다.
이 -G
옵션은 Azure SQL Database 및 Azure Synapse Analytics에만 적용됩니다.
Azure AD 대화형 인증은 현재 Linux 또는 macOS에서 지원되지 않습니다. Azure AD 통합 인증을 사용하려면 SQL Server 용 Microsoft ODBC Driver 17 버전 17.6.1 이상과 올바르게 구성된 Kerberos 환경이 필요합니다.
Azure Active Directory 인증에 대한 자세한 내용은 sqlcmd의 Azure Active Directory 인증을 참조하세요.
-H workstation_name
워크스테이션 이름입니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDWORKSTATION
를 설정합니다. 워크스테이션 이름은 카탈로그 뷰의 sys.sysprocesses
열에 hostname
나열되며 저장 프로시저sp_who
를 사용하여 반환할 수 있습니다. 이 옵션을 지정하지 않으면 기본값은 현재 컴퓨터 이름입니다. 이 이름은 다른 sqlcmd 세션을 식별하는 데 사용할 수 있습니다.
-j
원시 오류 메시지를 화면에 출력합니다.
-K application_intent
서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. 현재 지원되는 값은 .입니다 ReadOnly
. 지정되지 않은 경우 -K
sqlcmd는 가용성 그룹의 보조 복제본(replica) 대한 연결을 지원하지 않습니다. 자세한 내용은 활성 보조 복제본: 읽기 가능한 보조 복제본(Always On 가용성 그룹)을 참조하세요.
-M multisubnet_failover
SQL Server 가용성 그룹 또는 SQL Server 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때 항상 지정 -M
합니다. -M
은 현재 활성 상태인 서버를 빠르게 검색하여 연결할 수 있도록 제공합니다. 지정 -M
하지 않으면 -M
꺼져 있습니다. 수신기, 클라이언트 연결 및 애플리케이션 장애 조치(Failover)에 대한 자세한 내용은 가용성 그룹의 생성 및 구성 (SQL Server), 장애 조치(Failover) 클러스터링 및 Always On 가용성 그룹(SQL Server) 및 활성 보조: 읽기 가능한 보조 복제본(Always On 가용성 그룹)을 참조하세요.
-N
이 옵션은 클라이언트에서 암호화된 연결을 요청하는 데 사용됩니다.
sqlcmd(Go) 유틸리티 -N
의 경우 이제 중 하나false
true
일 수 있는 문자열 값을 사용하거나 disable
암호화 선택을 지정합니다. (default
는 매개 변수를 생략하는 것과 같습니다.)
-C
제공되지 않은 경우-N
sqlcmd는 서버 인증서의 유효성을 검사하지 않고 서버와 인증을 협상합니다.- 제공되지만
-C
그렇지 않은 경우-N
sqlcmd에는 서버 인증서의 유효성 검사가 필요합니다. 암호화 값은false
여전히 로그인 패킷의 암호화로 이어질 수 있습니다. - 둘 다
-N
-C
제공된 경우 sqlcmd 는 암호화 협상에 해당 값을 사용합니다.
-P 암호
사용자가 지정한 암호입니다. 암호는 대소문자를 구분합니다. -U
옵션이 사용되고 -P
옵션이 사용되지 않고 환경 변수가 SQLCMDPASSWORD
설정되지 않은 경우 sqlcmd는 사용자에게 암호를 묻는 메시지를 표시합니다. null(빈) 암호는 사용하지 않는 것이 좋지만 매개 변수 값(""
)에 대해 연속된 큰따옴표 쌍을 사용하여 null 암호를 지정할 수 있습니다.
Important
사용 -P
은 안전하지 않은 것으로 간주되어야 합니다. 명령줄에 암호를 입력하지 마세요. 또는 환경 변수를 SQLCMDPASSWORD
사용하거나 옵션을 생략하여 암호를 대화형으로 입력합니다 -P
.
강력한 암호를 사용하는 것이 좋습니다.
암호 프롬프트는 다음과 같이 콘솔에 암호 프롬프트를 인쇄하여 표시됩니다. Password:
사용자 입력이 숨겨집니다. 즉, 아무 것도 표시되지 않으며 커서가 위치에 유지됩니다.
환경 변수를 SQLCMDPASSWORD
사용하면 현재 세션에 대한 기본 암호를 설정할 수 있습니다. 따라서 암호를 일괄 처리 파일로 하드 코딩할 필요가 없습니다. 다음 예제에서는 먼저 명령 프롬프트에서 변수를 설정한 SQLCMDPASSWORD
다음 sqlcmd 유틸리티에 액세스합니다.
명령 프롬프트에서 다음을 입력합니다.
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
SET SQLCMDPASSWORD=p@a$$w0rd
sqlcmd
사용자 이름과 암호 조합이 올바르지 않으면 오류 메시지가 생성됩니다.
참고 항목
OSQLPASSWORD
환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. 환경 변수가 SQLCMDPASSWORD
환경 변수보다 우선합니다 OSQLPASSWORD
. 따라서 sqlcmd 와 osql 을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.
옵션과 -P
함께 -E
옵션을 사용하면 오류 메시지가 생성됩니다.
-P
옵션 뒤에 둘 이상의 인수가 있으면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-S [protocol:]server[\instance_name][,port]
연결할 SQL Server 인스턴스를 지정합니다. sqlcmd 스크립팅 변수SQLCMDSERVER
를 설정합니다.
해당 서버 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결하려면 server_name을 지정합니다. server_name[\instance_name]을 지정하여 해당 서버 컴퓨터의 명명된 SQL Server 인스턴스에 연결합니다. 서버 컴퓨터를 지정하지 않으면 sqlcmd가 로컬 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결됩니다. 이 옵션은 네트워크의 원격 컴퓨터에서 sqlcmd를 실행할 때 필요합니다.
프로토콜 은 tcp
(TCP/IP), lpc
(공유 메모리) 또는 np
(명명된 파이프)일 수 있습니다.
sqlcmd를 시작할 때 server_name[\instance_name]을 지정하지 않으면 SQL Server는 환경 변수를 검사 사용합니다SQLCMDSERVER
.
참고 항목
OSQLSERVER
환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. 환경 변수가 SQLCMDSERVER
환경 변수보다 우선합니다 OSQLSERVER
. 따라서 sqlcmd 와 osql 을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.
-U login_id
로그인 이름 또는 포함된 데이터베이스 사용자 이름입니다. 포함된 데이터베이스 사용자의 경우 데이터베이스 이름 옵션(-d
)을 제공해야 합니다.
참고 항목
OSQLUSER
환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. 환경 변수가 SQLCMDUSER
환경 변수보다 우선합니다 OSQLUSER
. 따라서 sqlcmd 와 osql 을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.
옵션 또는 -P
옵션을 지정 -U
하지 않으면 sqlcmd는 Windows 인증 모드를 사용하여 연결을 시도합니다. sqlcmd를 실행하는 사용자의 Windows 계정을 기반으로 인증이 수행됩니다.
옵션과 -U
함께 -E
옵션을 사용하는 경우(이 문서의 뒷부분에서 설명) 오류 메시지가 생성됩니다. -U
옵션 뒤에 둘 이상의 인수가 있으면 오류 메시지가 생성되고 프로그램이 종료됩니다.
-z new_password
암호를 변경합니다.
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd
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
sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd
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 유니코드입니다.출력 파일이 지정되지 않은 경우 출력 코드 페이지는 콘솔 코드 페이지입니다. 이 방법을 사용하면 출력을 콘솔에 올바르게 표시할 수 있습니다.
여러 입력 파일이 있는 경우 동일한 코드 페이지를 사용하는 것으로 간주됩니다. 유니코드 및 유니코드가 아닌 입력 파일을 혼합할 수 있습니다.
명령 프롬프트에 입력 chcp
하여 코드 페이지를 확인합니다 cmd.exe
.
-i input_file[,input_file2...]
Transact-SQL 문 또는 저장 프로시저의 일괄 처리가 포함된 파일을 식별합니다. 순서대로 읽고 처리하는 여러 파일을 지정할 수 있습니다. 파일 이름 사이에 공백을 사용하지 마세요. sqlcmd 검사 먼저 지정된 모든 파일이 있는지 확인합니다. 하나 이상의 파일이 없 으면 sqlcmd가 종료됩니다. -i
옵션과 -Q
/-q
옵션은 함께 사용할 수 없습니다.
경로 예제:
-i C:\<filename>
-i \\<Server>\<Share$>\<filename>
-i "C:\Some Folder\<file name>"
공백이 포함된 파일 경로는 따옴표로 묶어야 합니다.
이 옵션은 다음을 두 번 이상 사용할 수 있습니다.
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
sqlcmd -i <input_file1> -i <input_file2>
-o output_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>"
공백이 포함된 파일 경로는 따옴표로 묶어야 합니다.
-r[0 | 1]
오류 메시지 출력을 화면(stderr
)으로 리디렉션합니다. 매개 변수를 지정하지 않거나 지정 0
하는 경우 심각도 수준이 11 이상인 오류 메시지만 리디렉션됩니다. 지정 1
하면 포함된 PRINT
모든 오류 메시지 출력이 리디렉션됩니다. 이 옵션은 사용 -o
하는 경우 영향을 주지 않습니다. 기본적으로 메시지는 .으로 stdout
전송됩니다.
참고 항목
sqlcmd(Go) 유틸리티의 -r
경우 인수 또는 1
인수가 0
필요합니다.
-R
적용 대상: ODBC sqlcmd 만 해당합니다.
클라이언트의 로캘을 기반으로 SQL Server에서 검색된 숫자, 통화, 날짜 및 시간 열을 sqlcmd에서 지역화합니다. 기본적으로 이러한 열은 서버의 국가별 설정을 사용하여 표시됩니다.
-u
input_file 형식에 관계없이 output_file이 유니코드 형식으로 저장되도록 지정합니다.
참고 항목
sqlcmd(Go) 유틸리티의 경우 생성된 유니코드 출력 파일에는 UTF-16 BOM(Little-Endian Byte-order mark)이 기록됩니다.
쿼리 실행 옵션
-e
입력 스크립트를 표준 출력 디바이스(stdout
)에 씁니다.
I-
적용 대상: ODBC sqlcmd 만 해당합니다.
연결 옵션을 .로 SET QUOTED_IDENTIFIER
ON
설정합니다. 기본적으로 OFF
로 설정됩니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.
참고 항목
sqlcmd(Go) 유틸리티에서 따옴표 붙은 식별자 동작을 사용하지 않도록 설정하려면 스크립트에 추가 SET QUOTED IDENTIFIER OFF
합니다.
-q "cmdline 쿼리"
sqlcmd가 시작될 때 쿼리를 실행하지만 쿼리 실행이 완료되면 sqlcmd를 종료하지 않습니다. 다중 세미콜론으로 구분된 쿼리를 실행할 수 있습니다. 다음 예제와 같이 쿼리 주위에 따옴표를 사용합니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
쿼리에서 GO
종결자를 사용하지 마세요.
이 옵션과 함께 지정하면 -b
sqlcmd가 오류 발생 후 종료됩니다. -b
는 이 문서의 다른 위치에 설명되어 있습니다.
-Q "cmdline 쿼리"
sqlcmd가 시작될 때 쿼리를 실행한 다음 sqlcmd를 즉시 종료합니다. 다중 세미콜론으로 구분된 쿼리를 실행할 수 있습니다.
다음 예제와 같이 쿼리 주위에 따옴표를 사용합니다.
명령 프롬프트에서 다음을 입력합니다.
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2022 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2022 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
Important
쿼리에서 GO
종결자를 사용하지 마세요.
이 옵션과 함께 지정하면 -b
sqlcmd가 오류 발생 후 종료됩니다. -b
는 이 문서의 다른 위치에 설명되어 있습니다.
-t query_timeout
명령(또는 Transact-SQL 문)이 시간 초과되기 전의 시간(초)을 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDSTATTIMEOUT
를 설정합니다. query_timeout 값을 지정하지 않으면 명령 시간이 초과되지 않습니다. query_timeout 사이의 1
65534
숫자여야 합니다. 제공된 값이 숫자가 아니거나 해당 범위에 속하지 않으면 sqlcmd 에서 오류 메시지를 생성합니다.
참고 항목
실제 제한 시간 값은 지정된 query_timeout 값과 몇 초씩 다를 수 있습니다.
-v var = value [ var = value... ]
sqlcmd 스크립트에서 사용할 수 있는 sqlcmd 스크립팅 변수를 만듭니다. 값에 공백이 포함된 경우 값을 따옴표로 묶습니다. 여러 <var>="<value>"
값을 지정할 수 있습니다. 지정된 값에 오류가 있는 경우 sqlcmd 는 오류 메시지를 생성한 다음 종료합니다.
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
sqlcmd -v MyVar1=something MyVar2="some thing"
sqlcmd -v MyVar1=something -v MyVar2="some thing"
-x
sqlcmd 에서 스크립팅 변수를 무시하도록 합니다. 이 매개 변수는 스크립트에 같은 일반 변수$(<variable_name>)
와 형식이 같은 문자열을 포함할 수 있는 많은 INSERT
문을 포함하는 경우에 유용합니다.
형식 옵션
-h 헤더
열 머리글 사이에 인쇄할 행 수를 지정합니다. 기본적으로 각 쿼리 결과 집합마다 머리글을 한 번 출력합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDHEADERS
를 설정합니다. 머리글을 인쇄하지 않도록 지정하는 데 사용합니다 -1
. 유효하지 않은 값이 있으면 sqlcmd 에서 오류 메시지를 생성한 다음 종료합니다.
-k [1 | 2]
출력에서 탭 및 새 줄 문자와 같은 모든 컨트롤 문자를 제거합니다. 이 매개 변수는 데이터가 반환되는 경우 열 서식을 유지합니다.
-k
컨트롤 문자를 제거합니다.-k1
는 각 컨트롤 문자를 공백으로 대체합니다.-k2
는 연속된 컨트롤 문자를 단일 공백으로 대체합니다.
-s col_separator
열 구분 기호 문자를 지정합니다. 기본값은 빈 공간입니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDCOLSEP
를 설정합니다. 앰퍼샌드() 또는 세미콜론;
(&
)과 같이 운영 체제에 특별한 의미가 있는 문자를 사용하려면 문자를 따옴표("
)로 묶습니다. 열 구분 기호는 8비트 문자일 수 있습니다.
-w screen_width
출력의 화면 너비를 지정합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDCOLWIDTH
를 설정합니다. 열 너비는 .보다 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(사용자 정의 데이터 형식 )
- text
- ntext
- image
UDT는 구현에 따라 길이가 고정될 수 있습니다. 고정 길이 UDT의 길이가 display_width 짧으면 반환된 UDT의 값은 영향을 받지 않습니다. 그러나 길이가 display_width보다 길면 출력이 잘립니다.
주의
-y 0
이 옵션은 반환되는 데이터의 크기에 따라 서버와 네트워크 모두에서 심각한 성능 문제가 발생할 수 있으므로 주의해야 합니다.
-Y fixed_length_type_display_width
sqlcmd 스크립팅 변수 SQLCMDMAXFIXEDTYPEWIDTH
를 설정합니다. 기본값은 (무제한)입니다 0
. 다음 데이터 형식에 대해 반환되는 문자 수를 제한합니다.
- char(n), 여기서 1 <= n<= 8000
- nchar(n), 여기서 1 <= n<= 4000
- varchar(n), 여기서 1 <= n<= 8000
- nvarchar(n), 여기서 1 <= n<= 4000
- varbinary(n), 여기서 1 <= n<= 4000
- sql_variant
오류 보고 옵션
-b
sqlcmd가 종료되고 오류가 발생할 때 값을 반환 DOS ERRORLEVEL
합니다. 변수에 ERRORLEVEL
반환되는 값은 1
SQL Server 오류 메시지의 심각도 수준이 10보다 큰 경우이고, 그렇지 않으면 반환되는 값입니다 0
. -V
옵션 외-b
에 옵션이 설정된 경우 심각도 수준이 사용-V
으로 설정된 값보다 낮으면 sqlcmd에서 오류를 보고하지 않습니다. 명령 프롬프트 일괄 처리 파일은 ERRORLEVEL
값을 테스트하고 오류를 적절하게 처리할 수 있습니다. sqlcmd 는 심각도 수준 10(정보 메시지)에 대한 오류를 보고하지 않습니다.
sqlcmd 스크립트에 잘못된 주석, 구문 오류가 포함되어 있거나 스크립팅 변수 ERRORLEVEL
가 없는 경우 반환됩니다1
.
-m error_level
에 보내는 오류 메시지를 제어합니다 stdout
. 심각도가 이 수준보다 크거나 같은 메시지는 보내집니다. 이 값을 설정 -1
하면 정보 메시지를 포함한 모든 메시지가 전송됩니다. 공백은 사이와 -1
. 사이에 -m
허용되지 않습니다. 예를 들어 유효 -m-1
하고 -m -1
유효하지 않습니다.
이 옵션은 sqlcmd 스크립팅 변수SQLCMDERRORLEVEL
도 설정합니다. 이 변수의 기본값은 .입니다 0
.
-V error_severity_level
변수를 설정하는 데 사용되는 심각도 수준을 제어합니다 ERRORLEVEL
. 심각도 수준이 이 값 집합 ERRORLEVEL
보다 크거나 같은 오류 메시지입니다. 0보다 작은 값은 .로 0
보고됩니다. Batch 및 CMD 파일을 사용하여 변수 값을 ERRORLEVEL
테스트할 수 있습니다.
기타 옵션
-a packet_size
다른 크기의 패킷을 요청합니다. 이 옵션은 sqlcmd 스크립팅 변수SQLCMDPACKETSIZE
를 설정합니다. packet_size 사이의 512
32767
값이어야 합니다. 기본값은 4096
입니다. 패킷 크기가 클수록 명령 간에 GO
Transact-SQL 문이 많은 스크립트 실행을 위한 성능이 향상될 수 있습니다. 더 큰 패킷 크기를 요청할 수 있습니다. 그러나 요청이 거부되면 sqlcmd 는 패킷 크기에 대해 서버 기본값을 사용합니다.
-c batch_terminator
일괄 처리 종결자를 지정합니다. 기본적으로 명령이 종료되고 줄에 단어를 GO
직접 입력하여 SQL Server로 전송됩니다. 일괄 처리 종결자를 다시 설정하는 경우 백슬래시 앞에 오는 경우에도 운영 체제에 특별한 의미가 있는 Transact-SQL 예약 키워드(keyword) 또는 문자를 사용하지 마세요.
-L[c]
로컬로 구성된 서버 컴퓨터와 네트워크에서 브로드캐스트하는 서버 컴퓨터의 이름을 나열합니다. 이 매개 변수는 다른 매개 변수와 함께 사용할 수 없습니다. 나열할 수 있는 서버 컴퓨터의 최대 수는 3000개입니다. 버퍼 크기 때문에 서버 목록이 잘리면 경고 메시지가 표시됩니다.
참고 항목
네트워크에서 브로드캐스트의 특성으로 인해 sqlcmd 는 모든 서버에서 적시에 응답을 받지 못할 수 있습니다. 따라서 반환되는 서버 목록은 이 옵션의 호출마다 다를 수 있습니다.
선택적 매개 변수 c
를 지정하면 출력이 머리글 선 없이 Servers:
나타나고 각 서버 줄은 선행 공백 없이 나열됩니다. 이 프레젠테이션을 클린 출력이라고 합니다. 클린 출력은 스크립팅 언어의 처리 성능을 향상시킵니다.
-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
!!
command
-X
이 옵션을 지정하면 환경 변수가 sqlcmd에 전달되지 않습니다. 또한 스크립팅 변수를 사용하여 지정된 시작 스크립트가 SQLCMDINI
실행되지 않도록 합니다. sqlcmd 스크립팅 변수에 대한 자세한 내용은 sqlcmd - 스크립팅 변수와 함께 사용하세요.
-?
sqlcmd 버전 과 sqlcmd 옵션의 구문 요약 을 표시합니다.
참고 항목
macOS에서 대신(따옴표 포함) 실행 sqlcmd '-?'
합니다.
설명
구문 섹션에 표시된 순서대로 옵션을 사용할 필요가 없습니다.
여러 결과가 반환 되면 sqlcmd 는 일괄 처리에서 각 결과 집합 사이에 빈 줄을 인쇄합니다. 또한 <x> rows affected
메시지가 실행된 문에 적용되지 않으면 표시되지 않습니다.
sqlcmd를 대화형으로 사용하려면 명령 프롬프트에 이 문서의 앞부분에서 설명한 옵션 중 하나 이상을 입력 sqlcmd
합니다. 자세한 내용은 sqlcmd 유틸리티 사용을 참조 하세요.
참고 항목
옵션 -l
-Q
-Z
또는 -i
실행 후 sqlcmd가 종료되도록 합니다.
모든 인수 및 확장된 변수를 포함하여 명령 환경에서 sqlcmd 명령줄의 총 길이(예cmd.exe
: 또는bash
)는 기본 운영 체제에 의해 결정됩니다.
변수 우선 순위(낮음에서 높음)
- 시스템 수준 환경 변수
- 사용자 수준 환경 변수
- 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 | "" | |
SQLCMDUSEAAD | -G | R/W | "" |
SQLCMDUSER
, SQLCMDPASSWORD
및 SQLCMDSERVER
사용 시 :Connect
설정됩니다.
R
는 프로그램 초기화 중에 값을 한 번만 설정할 수 있음을 나타냅니다.
R/W
는 명령을 사용하여 :setvar
값을 수정할 수 있으며 후속 명령은 새 값의 영향을 받습니다.
sqlcmd 명령
sqlcmd 내의 Transact-SQL 문 외에도 다음 명령을 사용할 수 있습니다.
GO
[ 개수 ]
:List
[:]RESET
:Error
[:]ED
:Out
[:]!!
:Perftrace
[:]QUIT
:Connect
[:]EXIT
:On Error
:r
:Help
:ServerList
:XML [ ON | OFF ]
:Setvar
:Listvar
sqlcmd 명령을 사용하는 경우 다음 사항에 유의하세요.
를 제외한 모든 sqlcmd 명령은 콜론(
:
)으로 접두사를 지정해야GO
합니다.Important
기존 osql 스크립트와의 이전 버전과의 호환성을 기본 위해 콜론
:
없이 일부 명령이 인식됩니다.sqlcmd 명령은 줄의 시작 부분에 나타나는 경우에만 인식됩니다.
모든 sqlcmd 명령은 대/소문자를 구분하지 않습니다.
각 명령을 별도의 줄에 입력해야 합니다. 명령 뒤에 Transact-SQL 문이나 다른 명령이 올 수 없습니다.
명령은 즉시 실행됩니다. Transact-SQL 문과 같이 실행 버퍼에 배치되지 않습니다.
명령 편집
[:] Ed
텍스트 편집기를 시작합니다. 이 편집기를 사용하여 현재 Transact-SQL 일괄 처리 또는 마지막으로 실행된 일괄 처리를 편집할 수 있습니다. 마지막으로 실행된 일괄 처리를 편집하려면 마지막 일괄 처리 실행 ED
이 완료된 직후에 명령을 입력해야 합니다.
텍스트 편집기는 환경 변수에 SQLCMDEDITOR
의해 정의됩니다. 기본 편집기는 .입니다 Edit
. 편집기를 변경하려면 환경 변수를 SQLCMDEDITOR
설정합니다. 예를 들어 편집기를 Microsoft 메모장 설정하려면 명령 프롬프트에서 다음을 입력합니다.
SET SQLCMDEDITOR=notepad
[:] 재설정
문 캐시를 지웁니다.
List:
문 캐시 내용을 출력합니다.
변수
:Setvar <var> [ "value" ]
sqlcmd 스크립팅 변수를 정의합니다. 스크립팅 변수의 형식 $(VARNAME)
은 다음과 같습니다.
변수 이름은 대/소문자를 구분하지 않습니다.
스크립팅 변수는 다음과 같은 방법으로 설정할 수 있습니다.
명령줄 옵션을 사용하여 암시적으로 설정합니다. 예를 들어 이
-l
옵션은 sqlcmd 변수를SQLCMDLOGINTIMEOUT
설정합니다.명령을 사용하여 명시적으로.
:Setvar
sqlcmd를 실행하기 전에 환경 변수를 정의합니다.
참고 항목
이 -X
옵션은 환경 변수가 sqlcmd에 전달되지 않도록 방지합니다.
사용 :Setvar
으로 정의된 변수와 환경 변수의 이름이 같으면 사용하여 :Setvar
정의된 변수가 우선합니다.
변수 이름에는 빈 공백 문자가 포함되어서는 안 됩니다.
변수 이름은 다음과 같은 $(var)
변수 식과 같은 형식을 가질 수 없습니다.
스크립팅 변수의 문자열 값에 빈 공백이 포함된 경우 값을 따옴표로 묶습니다. 스크립팅 변수의 값을 지정하지 않으면 스크립팅 변수가 삭제됩니다.
:Listvar
현재 설정된 스크립팅 변수 목록을 표시합니다.
참고 항목
sqlcmd에서 설정한 스크립팅 변수와 명령을 사용하여 :Setvar
설정된 변수만 표시됩니다.
출력 명령
:Error <filename> | STDERR | Stdout
모든 오류 출력을 파일 이름으로stderr
지정된 파일로 리디렉션합니다stdout
. 이 :Error
명령은 스크립트에 여러 번 나타날 수 있습니다. 기본적으로 오류 출력은 .으로 stderr
전송됩니다.
filename
출력을 받는 파일을 만들고 엽니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 사용 권한 또는 기타 이유로 인해 파일을 사용할 수 없는 경우 출력이 전환되지 않고 마지막으로 지정된 대상 또는 기본 대상으로 전송됩니다.
STDERR
오류 출력을 스트림으로
stderr
전환합니다. 리디렉션된 경우 스트림이 리디렉션된 대상은 오류 출력을 받습니다.STDOUT
오류 출력을 스트림으로
stdout
전환합니다. 리디렉션된 경우 스트림이 리디렉션된 대상은 오류 출력을 받습니다.
:Out <파일 이름> | STDERR | Stdout
모든 쿼리 결과를 만들어 파일 이름으로stderr
지정된 파일로 리디렉션합니다stdout
. 기본적으로 출력은 .으로 stdout
전송됩니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 이 :Out
명령은 스크립트에 여러 번 나타날 수 있습니다.
:P erftrace <파일 이름> | STDERR | Stdout
모든 성능 추적 정보를 만들고 파일 이름으로 지정된 파일로 stderr
리디렉션합니다stdout
. 기본적으로 성능 추적 출력은 stdout
. 파일이 이미 있는 경우 0바이트로 잘립니다. 이 :Perftrace
명령은 스크립트에 여러 번 나타날 수 있습니다.
실행 제어 명령
:On Error [ exit | ignore ]
스크립트 또는 일괄 처리 실행 중에 오류가 발생할 때 수행할 작업을 설정합니다.
exit
옵션을 사용하면 sqlcmd가 적절한 오류 값으로 종료됩니다.
ignore
옵션을 사용하는 경우 sqlcmd는 오류를 무시하고 일괄 처리 또는 스크립트를 계속 실행합니다. 기본적으로 오류 메시지가 출력됩니다.
[:] 종료
sqlcmd가 종료되도록 합니다.
[:] EXIT [ ( statement ) ]
문 결과를 sqlcmd의 SELECT
반환 값으로 사용할 수 있습니다. 숫자인 경우 마지막 결과 행의 첫 번째 열이 4 바이트 정수(long)로 변환됩니다. MS-DOS, Linux 및 macOS는 하위 바이트를 부모 프로세스 또는 운영 체제 오류 수준으로 전달합니다. 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 스크립트 내에서 사용되고 상태가 127인 경우 RAISERROR
sqlcmd는 종료되고 메시지 ID를 클라이언트에 다시 반환합니다. 예시:
RAISERROR(50001, 10, 127)
이 오류로 인해 sqlcmd 스크립트가 종료되고 메시지 ID 50001이 클라이언트에 반환됩니다.
SQL Server에서 예약된 -99
반환 값 -1
과 sqlcmd는 다음과 같은 추가 반환 값을 정의합니다.
반환 값 | 설명 |
---|---|
100- | 반환 값을 선택하기 전에 오류가 발생했습니다. |
-101 | 반환 값을 선택할 때 행을 찾을 수 없습니다. |
-102 | 반환 값을 선택할 때 변환 오류가 발생했습니다. |
GO [개수]
GO
는 일괄 처리의 끝과 캐시된 Transact-SQL 문의 실행을 모두 신호로 표시합니다. 일괄 처리는 별도의 일괄 처리로 여러 번 실행됩니다. 단일 일괄 처리에서 변수를 두 번 이상 선언할 수 없습니다.
기타 명령
:r <파일 이름>
filename으로 지정된 파일의 추가 Transact-SQL 문과 sqlcmd 명령을 명령문 캐시로 구문 분석합니다. filename은 sqlcmd가 실행된 시작 디렉터리를 기준으로 읽습니다.
파일에 뒤에 표시되지 GO
않는 Transact-SQL 문이 포함된 경우 다음 :r
줄에 입력 GO
해야 합니다.
일괄 처리 종결자가 발생한 후 파일을 읽고 실행합니다. 여러 :r
명령을 실행할 수 있습니다. 파일에는 일괄 처리 종결자를 GO
포함한 모든 sqlcmd 명령이 포함될 수 있습니다.
참고 항목
대화형 모드로 표시되는 줄 수는 발생한 모든 :r
명령에 대해 하나씩 증가합니다. 이 :r
명령은 list 명령의 출력에 표시됩니다.
:ServerList
로컬로 구성된 서버와 네트워크에서 브로드캐스트하는 서버의 이름을 나열합니다.
:커넥트 server_name[\instance_name] [-l timeout] [-U user_name [-P 암호]]
SQL Server 인스턴스에 커넥트. 또한 현재 연결을 닫습니다.
제한 시간 옵션:
값 | 동작 |
---|---|
0 |
영원히 기다립니다. |
n>0 |
n초 동안 기다립니다. |
스크립팅 변수는 SQLCMDSERVER
현재 활성 연결을 반영합니다.
시간 제한을 지정하지 않으면 변수의 값이 SQLCMDLOGINTIMEOUT
기본값입니다.
옵션 또는 환경 변수로 user_name 지정한 경우 사용자에게 암호를 입력하라는 메시지가 표시됩니다. 사용자 또는 SQLCMDPASSWORD
환경 변수가 SQLCMDUSER
설정되었는지 묻는 메시지가 표시되지 않습니다. 옵션 또는 환경 변수를 제공하지 않으면 Windows 인증 모드를 사용하여 로그인합니다. 예를 들어 통합 보안을 사용하여 SQL Server의 인스턴스 instance1
에 myserver
연결하려면 다음 명령을 사용합니다.
:connect myserver\instance1
스크립팅 변수를 사용하는 기본 인스턴스에 myserver
연결하려면 다음 설정을 사용합니다.
:setvar myusername test
:setvar myservername myserver
:connect $(myservername) $(myusername)
[:]!! command
운영 체제 명령을 실행합니다. 운영 체제 명령을 실행하려면 두 개의 느낌표(!!
)와 운영 체제 명령이 있는 줄을 시작합니다. 예시:
:!! dir
참고 항목
이 명령은 sqlcmd가 실행 중인 컴퓨터에서 실행됩니다.
:XML [ ON | OFF ]
자세한 내용은 이 문서의 XML 출력 형식 및 JSON 출력 형식을 참조하세요.
도움말:
각 명령에 대한 간단한 설명과 함께 sqlcmd 명령을 나열합니다.
sqlcmd 파일 이름
옵션 또는 :r
명령을 사용하여 sqlcmd 입력 파일을 지정할 -i
수 있습니다. 출력 파일은 옵션 또는 :Error
명령 :Out
과 :Perftrace
함께 -o
지정할 수 있습니다. 다음은 이러한 파일 작업에 대한 몇 가지 지침입니다.
:Error
:Perftrace
는:Out
별도의 파일 이름 값을 사용해야 합니다. 동일한 파일 이름을 사용하는 경우 명령의 입력이 섞일 수 있습니다.원격 서버에 있는 입력 파일이 로컬 컴퓨터의 sqlcmd에서 호출되고 파일과 같은
:Out c:\OutputFile.txt
드라이브 파일 경로가 포함된 경우 출력 파일은 원격 서버가 아닌 로컬 컴퓨터에 만들어집니다.유효한 파일 경로에는 다음
C:\<filename>
이\\<Server>\<Share$>\<filename>
"C:\Some Folder\<file name>"
포함됩니다. 경로에 공백이 있는 경우 따옴표를 사용합니다.각각의 새 sqlcmd 세션은 이름이 같은 기존 파일을 덮어씁니다.
정보 메시지
sqlcmd 는 서버에서 보낸 모든 정보 메시지를 출력합니다. 다음 예에서는 Transact-SQL 문을 실행한 후 정보 메시지가 출력됩니다.
sqlcmd를 시작합니다. sqlcmd 명령 프롬프트에서 쿼리를 입력합니다.
USE AdventureWorks2022;
GO
Enter 키를 누르면 다음 정보 메시지가 출력됩니다.
Changed database context to 'AdventureWorks2022'.
Transact-SQL 쿼리의 출력 형식
sqlcmd 는 먼저 선택 목록에 지정된 열 이름을 포함하는 열 머리글을 인쇄합니다. 열 이름은 문자를 사용하여 SQLCMDCOLSEP
구분됩니다. 기본적으로 구분 문자는 공백입니다. 열 이름이 열 너비보다 짧은 경우 출력은 다음 열까지 공백으로 채워집니다.
이 줄 뒤에는 일련의 대시 문자인 구분선이 잇습니다. 다음 출력은 예제를 보여 있습니다.
sqlcmd를 시작합니다. sqlcmd 명령 프롬프트에서 쿼리를 입력합니다.
USE AdventureWorks2022;
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
사용합니다.
명령이 sqlcmd를 :XML OFF
행 지향 출력으로 다시 전환하므로 명령이 실행 :XML OFF
되기 전에 명령을 표시 GO
해서는 안 됩니다.
XML(스트리밍) 데이터 및 행 집합 데이터는 혼합할 수 없습니다. XML 스트림을 :XML ON
출력하는 Transact-SQL 문이 실행되기 전에 명령이 실행되지 않은 경우 출력이 왜곡됩니다. 명령이 :XML ON
실행되면 일반 행 집합을 출력하는 Transact-SQL 문을 실행할 수 없습니다.
참고 항목
이 :XML
명령은 문을 지원하지 SET STATISTICS XML
않습니다.
JSON 출력 형식
JSON 출력이 예상되는 경우 다음 명령을 :XML ON
사용합니다. 그렇지 않으면 출력에 열 이름과 JSON 텍스트가 모두 포함됩니다. 이 출력은 유효한 JSON이 아닙니다.
XML 모드를 해제로 설정하려면 다음 명령을 :XML OFF
사용합니다.
자세한 내용은 이 문서의 XML 출력 형식을 참조하세요.
Azure AD 인증 사용
Azure AD 인증을 사용하는 예제:
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -l 30
sqlcmd -S Target_DB_or_DW.testsrv.database.windows.net -G -U bob@contoso.com -P MyAzureADPassword -l 30
sqlcmd 모범 사례
보안 및 효율성을 극대화하려면 다음 방법을 사용하십시오.
통합 보안을 사용합니다.
자동화된 환경에서 사용합니다
-X[1]
.적절한 파일 시스템 권한을 사용하여 입력 및 출력 파일을 보호합니다.
성능을 향상시키려면 여러 세션 대신 한 번의 sqlcmd 세션에서 가능한 한 많은 작업을 수행합니다.
일괄 처리 또는 쿼리 실행에 대한 제한 시간 값을 일괄 처리 또는 쿼리를 실행하는 데 예상보다 높게 설정합니다.
다음 방법을 사용하여 정확성을 최대화합니다.
심각도 16 수준 메시지를 기록하는 데 사용합니다
-V16
. 심각도 16 메시지는 사용자가 수정할 수 있는 일반적인 오류를 나타냅니다.프로세스가 종료된 후 종료 코드 및
DOS ERRORLEVEL
변수를 확인합니다. sqlcmd는 정상적으로 반환0
되며, 그렇지 않으면 구성된 대로-V
설정합니다ERRORLEVEL
. 즉,ERRORLEVEL
SQL Server에서 보고된 오류 번호와 같은 값이 되어서는 안 됩니다. 오류 번호는 시스템 함수 @@ERROR 해당하는 SQL Server 관련 값입니다.ERRORLEVEL
는 sqlcmd가 종료된 이유를 나타내는 sqlcmd 관련 값이며, 해당 값은 명령줄 인수 지정의-b
영향을 받습니다.
종료 코드를 검사 함께 사용 -V16
하며 DOS ERRORLEVEL
자동화된 환경, 특히 프로덕션 릴리스 전에 품질 게이트에서 오류를 catch하는 데 도움이 될 수 있습니다.