sqlcmd를 사용하여 연결
sqlcmd 유틸리티는 Linux 및 macOS 기반 Microsoft ODBC Driver for SQL Server에서 사용할 수 있습니다.
다음 명령은 각각 Windows 인증(Kerberos) 및 SQL Server 인증을 사용하는 방법을 보여줍니다.
sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx
사용 가능한 옵션
Linux 및 macOS의 sqlcmd에서 사용할 수 있는 옵션은 다음과 같습니다.
-?
sqlcmd
사용을 표시합니다.
-a
패킷 크기를 요청합니다.
-b
오류가 발생하는 경우 일괄 작업을 종료합니다.
-c batch_terminator
일괄 처리 종결자 지정
-C
서버 인증서를 신뢰합니다.
-d database_name
sqlcmd
를 시작할 때 USE
database_name 문을 실행합니다.
-D
sqlcmd
-S 옵션에 전달된 값이 DSN(데이터 원본 이름)으로 해석되도록 합니다. 자세한 내용은 이 문서의 끝에 있는 "sqlcmd
및 bcp
에서 DSN 지원"을 참조하세요.
-e
표준 출력 디바이스(stdout)에 입력 스크립트를 기록합니다.
-E
신뢰할 수 있는 연결(통합 인증)을 사용합니다. Linux 또는 macOS 클라이언트에서 통합 인증을 사용하는 신뢰할 수 있는 연결을 만드는 방법에 대한 자세한 내용은 통합 인증 사용을 참조하세요.
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
입력 및 출력 코드 페이지를 지정합니다. 코드 페이지 번호는 설치된 Linux 코드 페이지를 지정하는 숫자 값입니다. (17.5.1.1부터 사용 가능)
-G
이 스위치는 클라이언트가 Azure SQL Database, Azure SQL Managed Instance 또는 Azure Synapse Analytics에 연결할 때 사용자를 Microsoft Entra ID(이전 Azure Active Directory)로 인증하도록 지정하는 데 사용됩니다. 액세스 토큰 인증을 사용하기 위해 -P 옵션과 결합할 수 있습니다(v17.8 이상). 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDUSEAAD = true를 설정합니다. -G
스위치를 사용하려면 적어도 sqlcmd 버전 17.6이 필요합니다. 사용 중인 버전을 확인하려면 sqlcmd -?
를 실행합니다.
Important
-G 옵션은 Azure SQL Database, Azure SQL Managed Instance 및 Azure Synapse Analytics에만 적용됩니다.
Microsoft Entra 대화형 인증은 현재 Linux 또는 macOS에서 지원되지 않습니다. Microsoft Entra 통합 인증을 사용하려면 Microsoft ODBC Driver 17 for SQL Server 버전 17.6.1 이상 및 올바르게 구성된 Kerberos 환경이 필요합니다.
-h number_of_rows
열 제목 사이에 인쇄할 행 수를 지정합니다.
-H
워크스테이션 이름을 지정합니다.
-i input_file[,input_file[,...]]
SQL 문 또는 저장 프로시저의 일괄 처리가 포함된 파일을 식별합니다.
-I
SET QUOTED_IDENTIFIER
연결 옵션을 사용으로 설정합니다.
-k
컨트롤 문자를 제거하거나 대체합니다.
-K application_intent
서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. 현재 지원되는 유일한 값은 ReadOnly입니다. -K를 지정하지 않으면 sqlcmd
가 AlwaysOn 가용성 그룹에 있는 보조 복제본에 연결할 수 없습니다. 자세한 내용은 Linux 및 macOS의 ODBC 드라이버 - 고가용성 및 재해 복구를 참조하세요.
참고 항목
-K는 SUSE Linux용 CTP에서 지원되지 않습니다. 그러나 sqlcmd
에 전달된 DSN 파일에 ApplicationIntent=ReadOnly 키워드를 지정할 수 있습니다. 자세한 내용은 이 문서의 끝에 있는 "sqlcmd
및 bcp
에서 DSN 지원"을 참조하세요.
-l 시간 제한
서버에 연결을 시도할 때 sqlcmd
로그인 제한 시간(초)을 지정합니다.
-m error_level
stdout에 보낼 오류 메시지를 제어합니다.
-M multisubnet_failover
SQL Server 2012(11.x) 가용성 그룹 또는 SQL Server 2012(11.x) 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때는 항상 -M을 지정합니다. -M은 장애 조치(failover)를 더 조기에 감지하고 (현재) 활성 서버에 연결할 수 있도록 합니다. -M을 지정하지 않으면 -M이 비활성화됩니다. Always On 가용성 그룹에 대한 자세한 내용은 Linux 및 macOS의 ODBC 드라이버 - 고가용성 및 재해 복구를 참조하세요.
참고 항목
-M은 SUSE Linux용 CTP에서 지원되지 않습니다. 그러나 sqlcmd
로 전달되는 DSN 파일에 MultiSubnetFailover=Yes 키워드를 지정할 수 있습니다. 자세한 내용은 이 문서의 끝에 있는 "sqlcmd
및 bcp
에서 DSN 지원"을 참조하세요.
-N[s|m|o]
연결 암호화 모드를 각각 Strict, Mandatory 또는 Optional으로 설정합니다. 지정하지 않으면 기본값은 Mandatory입니다. ([s|m|o]
가 sqlcmd 18.0에 추가됨)
-o output_file
sqlcmd
의 출력을 수신할 파일을 식별합니다.
-p
모든 결과 집합에 대한 성능 통계를 인쇄합니다.
-P
사용자 암호를 지정합니다. U 없이 -G 옵션과 함께 사용하는 경우 액세스 토큰이 포함된 파일을 지정합니다(v17.8 이상). 토큰 파일은 UTF-16LE(BOM 없음) 형식이어야 합니다.
액세스 토큰은 다양한 메서드로 가져올 수 있습니다. 액세스 토큰은 있는 그대로 전송되므로, 바이트 단위(byte-for-byte)가 올바른 것이 중요합니다. 다음은 액세스 토큰을 가져오는 예제 명령입니다. 이 명령은 Azure CLI 및 Linux 명령을 사용하고 적절한 형식으로 파일에 저장합니다. 시스템 또는 터미널의 기본 인코딩이 ASCII 또는 UTF-8이 아닌 경우 iconv
옵션을 조정해야 할 수 있습니다. 결과 파일을 신중하게 보호하고 더 이상 필요하지 않은 경우 삭제해야 합니다.
az account get-access-token --resource https://database.windows.net --output tsv | cut -f 1 | tr -d '\n' | iconv -f ascii -t UTF-16LE > /tmp/tokenFile
-q commandline_query
sqlcmd
가 시작될 때 쿼리를 실행하지만 쿼리 실행이 완료되더라도 종료하지 않습니다.
-Q commandline_query
sqlcmd
를 시작할 때 쿼리를 실행합니다. 쿼리가 완료되면 sqlcmd
가 종료됩니다.
-r
오류 메시지를 stderr로 리디렉션합니다.
-R
드라이버가 클라이언트 지역 설정을 사용하여 통화 및 날짜 및 시간 데이터를 문자 데이터로 변환하도록 합니다. 현재는 en_US(미국 영어) 형식만 사용합니다.
-s column_separator_char
열 구분 기호 문자를 지정합니다.
-S [프로토콜:] 서버[,포트]
연결할 SQL Server 인스턴스를 지정하거나 -D를 사용하는 경우 DSN을 지정합니다. Linux 및 macOS 기반 ODBC 드라이버에는 -S가 필요합니다. 유효한 유일한 프로토콜 값은 tcp입니다.
-t query_timeout
명령(또는 SQL 문)이 시간 초과되기 전까지의 시간(초)을 지정합니다.
-u
input_file의 형식에 관계없이 output_file이 UNICODE 형식으로 저장되도록 지정합니다.
-U
login_id 사용자 로그인 ID를 지정합니다.
-V error_severity_level
ERRORLEVEL 변수를 설정하는 데 사용되는 심각도를 제어합니다.
-w column_width
출력의 화면 너비를 지정합니다.
-W
열에서 후행 공백을 제거합니다.
-x
변수 대체를 사용하지 않도록 설정합니다.
-X
명령, 시작 스크립트 및 환경 변수를 사용하지 안 함으로 설정합니다.
-y variable_length_type_display_width
sqlcmd
스크립팅 변수 SQLCMDMAXFIXEDTYPEWIDTH
를 설정합니다.
-Y fixed_length_type_display_width
sqlcmd
스크립팅 변수 SQLCMDMAXVARTYPEWIDTH
를 설정합니다.
-z 비밀번호
암호 변경.
-Z 비밀번호
비밀번호를 변경하고 종료합니다.
사용 가능한 명령
현재 릴리스에서 다음 명령을 사용할 수 있습니다.
[:]!!
연결:
오류:
[:]EXIT
GO [개수]
도움말:
List:
:Listvar
:On Error
:Out
:Perftrace
[:]QUIT
:r
:RESET
:setvar
사용할 수 없는 옵션
현재 릴리스에서는 다음 옵션을 사용할 수 없습니다.
-A
관리자 전용 연결(DAC)을 사용하여 SQL Server에 로그인합니다. DAC(관리자 전용 연결)를 만드는 방법에 대한 자세한 내용은 프로그래밍 지침을 참조하세요.
-L
로컬로 구성된 서버 컴퓨터와 네트워크에서 브로드캐스팅 중인 서버 컴퓨터의 이름을 나열합니다.
-v
sqlcmd
스크립트에서 사용할 수 있는 sqlcmd
스크립팅 변수를 만듭니다.
매개 변수를 한 파일 안에 배치한 다음 다른 파일에 추가하는 대체 방법을 사용할 수 있습니다. 이 방법으로 매개 변수 파일을 사용하여 값을 바꿀 수 있습니다. 예를 들어 다음과 같은 내용으로 a.sql
(매개 변수 파일)이라는 파일을 만듭니다.
:setvar ColumnName object_id
:setvar TableName sys.objects
그런 다음, 대체할 매개 변수를 사용하여 b.sql
이라는 파일을 만듭니다.
SELECT $(ColumnName) FROM $(TableName)
명령줄에서 다음 명령을 사용하여 a.sql
및 b.sql
를 c.sql
(으)로 결합합니다
cat a.sql > c.sql
cat b.sql >> c.sql
sqlcmd
을(를) 실행하고 입력 파일로 c.sql
을(를) 사용합니다.
sqlcmd -S<...> -P<..> -U<..> -I c.sql
사용할 수 없는 명령
현재 릴리스에서는 다음 명령을 사용할 수 없습니다.
:ED
:ServerList
:XML
sqlcmd 및 bcp에서의 DSN 지원
-D
를 지정하는 경우 sqlcmd 또는 bcp -S
옵션(또는 sqlcmd :Connect 명령)의 서버 이름 대신 DSN(데이터 원본 이름)을 지정할 수 있습니다. -D
을(를) 사용하면 sqlcmd 또는 bcp가 -S
옵션으로 DSN에 지정된 서버에 연결합니다.
시스템 DSN은 ODBC SysConfigDir 디렉터리(표준 설치 프로그램의 경우 odbc.ini
)의 /etc/odbc.ini
파일에 저장됩니다. 사용자 DSN은 사용자의 홈 디렉터리(.odbc.ini
)에 있는 ~/.odbc.ini
에 저장됩니다.
Windows 시스템에서 시스템 및 사용자 DSN은 레지스트리에 저장되며 odbcad32.exe를 통해 관리됩니다. bcp 및 sqlcmd는 파일 DSN을 지원하지 않습니다.
드라이버가 지원하는 항목 목록은 DSN 및 연결 문자열 키워드 및 특성을 참조하세요.
DSN에서는 드라이버 항목만 필요하지만 원격 서버에 연결하려면 sqlcmd
또는 bcp
는 서버 요소에 값이 필요합니다. SERVER 요소가 비어 있거나 DSN에 없는 경우 sqlcmd
및 bcp
는 로컬 시스템의 기본 인스턴스에 연결을 시도합니다.
Windows 시스템에서 bcp를 사용하는 경우, SQL Server 2017(14.x) 이하에서는 SQL Native Client 11 드라이버(sqlncli11.dll)가 필요하고, SQL Server 2019(15.x) 이상에서는 Microsoft ODBC 드라이버 17 for SQL Server 드라이버(msodbcsql17.dll)가 필요합니다.
DSN과 sqlcmd
또는 bcp
명령줄에 동일한 옵션이 지정되어 있으면 명령줄 옵션이 DSN에 사용된 값을 재정의합니다. 예를 들어 DSN에 DATABASE 항목이 있고 sqlcmd
명령줄이 -d를 포함하는 경우 -d에 전달된 값이 사용됩니다. DSN에 Trusted_Connection=yes가 지정되어 있으면 Kerberos 인증이 사용되며 사용자 이름(-U) 및 비밀번호(-P)가 제공된 경우 무시됩니다.
다음 별칭을 정의하여 isql
을 호출하는 기존 스크립트는 sqlcmd
를 사용하도록 수정할 수 있습니다. alias isql="sqlcmd -D"