sqlcmd를 사용하여 연결

ODBC 드라이버 다운로드

sqlcmd 유틸리티는 Linux 및 macOS 기반 SQL Server용 Microsoft ODBC Driver에서 사용할 수 있습니다.

다음 명령은 Windows 인증(Kerberos) 및 SQL Server 인증을 각각 사용하는 방법을 보여 줍니다.

sqlcmd -E -Sxxx.xxx.xxx.xxx
sqlcmd -Sxxx.xxx.xxx.xxx -Uxxx -Pxxx

사용 가능한 옵션

Linux 및 macOS의 sqlcmd에서 다음 옵션을 사용할 수 있습니다.

-?
sqlcmd 사용을 표시합니다.

-a
패킷 크기를 요청합니다.

-b
오류가 발생하는 경우 일괄 작업을 종료합니다.

-cbatch_terminator
일괄 처리 종결자를 지정합니다.

-C
서버 인증서를 신뢰합니다.

-ddatabase_name
sqlcmd를 시작할 때 USEdatabase_name 문을 실행합니다.

-D
sqlcmd -S 옵션에 전달된 값이 DSN(데이터 원본 이름)으로 해석되도록 합니다. 자세한 내용은 이 문서의 끝에 있는 'sqlcmdbcp에서 DSN 지원'을 참조하세요.

-e
표준 출력 디바이스(stdout)에 입력 스크립트를 기록합니다.

-E
신뢰할 수 있는 연결을 사용합니다(통합된 인증). Linux 또는 macOS 클라이언트에서 통합된 인증을 사용하는 신뢰할 수 있는 연결을 만드는 방법에 대한 자세한 내용은 통합 인증 사용을 참조하세요.

-fcodepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
입력 및 출력 코드 페이지를 지정합니다. 코드 페이지 번호는 설치된 Linux 코드 페이지를 지정하는 숫자 값입니다. (17.5.1.1부터 사용 가능)

-G
이 스위치는 SQL Database 또는 Azure Synapse Analytics에 연결할 때 클라이언트에서 Azure Active Directory 인증을 통해 사용자가 인증되도록 지정하는 데 사용됩니다. 액세스 토큰 인증을 사용하기 위해 -P 옵션과 결합할 수 있습니다(v17.8 이상). 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDUSEAAD = true를 설정합니다. -G 스위치를 사용하려면 sqlcmd 버전 17.6 이상이 필요합니다. 사용 중인 버전을 확인하려면 sqlcmd -?를 실행하세요.

중요

-G 옵션은 Azure SQL Database 및 Azure Synapse Analytics에만 적용됩니다. AAD 대화형 인증은 현재 Linux 또는 macOS에서 지원되지 않습니다. AAD 통합 인증을 사용하려면 Microsoft ODBC Driver 17 for SQL Server 버전 17.6.1 이상과 올바르게 구성된 Kerberos 환경이 필요합니다.

-hnumber_of_rows
열 머리글 사이에 출력할 행의 수를 지정합니다.

-H
워크스테이션 이름을 지정합니다.

-iinput_file[,input_file[,...]]
SQL 문 또는 저장 프로시저의 일괄 처리가 포함된 파일을 식별합니다.

-I
SET QUOTED_IDENTIFIER 연결 옵션을 사용하도록 설정합니다.

-k
제어 문자를 제거하거나 바꿉니다.

-Kapplication_intent
서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. 현재 ReadOnly값만 지원됩니다. -K를 지정하지 않으면 sqlcmd가 AlwaysOn 가용성 그룹에 있는 보조 복제본에 연결할 수 없습니다. 자세한 내용은 ODBC Driver on Linux and macOS - High Availability and Disaster Recovery(Linux 및 macOS의 ODBC 드라이버 - 고가용성, 재해 복구)를 참조하세요.

참고

-K는 CTP for SUSE Linux에서 지원되지 않습니다. 그러나 sqlcmd에 전달된 DSN 파일에서 ApplicationIntent=ReadOnly 키워드를 지정합니다. 자세한 내용은 이 문서의 끝에 있는 'sqlcmdbcp에서 DSN 지원'을 참조하세요.

-ltimeout
서버에 연결을 시도할 때 sqlcmd 로그인 제한 시간(초)을 지정합니다.

-merror_level
stdout에 보낼 오류 메시지를 제어합니다.

-Mmultisubnet_failover
SQL Server 2012(11.x) 가용성 그룹 또는 SQL Server 2012(11.x) 장애 조치(failover) 클러스터 인스턴스의 가용성 그룹 수신기에 연결할 때는 항상 -M을 지정합니다. -M은 현재 활성 상태인 서버에 대한 장애 조치를 빠르게 검색하고 연결할 수 있도록 지원합니다. –M이 지정되지 않으면 -M이 사용 해제됩니다. Always On 가용성 그룹에 대한 자세한 내용은 Linux 및 macOS의 ODBC 드라이버 - 고가용성 및 재해 복구를 참조하세요.

참고

-M은 CTP for SUSE Linux에서 지원되지 않습니다. 그러나 sqlcmd에 전달된 DSN 파일에서 MultiSubnetFailover=Yes 키워드를 지정합니다. 자세한 내용은 이 문서의 끝에 있는 'sqlcmdbcp에서 DSN 지원'을 참조하세요.

-N[s|m|o]
연결 암호화 모드를 각각 Strict, Mandatory 또는 Optional으로 설정합니다. 지정하지 않으면 기본값은 Mandatory입니다. ([s|m|o]가 sqlcmd 18.0에 추가됨)

-ooutput_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

-qcommandline_query
sqlcmd가 시작될 때 쿼리를 실행하지만 쿼리 실행이 완료되더라도 종료하지 않습니다.

-Qcommandline_query
sqlcmd이 시작할 때 쿼리를 실행합니다. 쿼리가 완료되면 sqlcmd가 종료됩니다.

-r
오류 메시지를 stderr로 리디렉션합니다.

-R
드라이버에서 클라이언트의 국가별 설정을 사용하여 통화, 날짜/시간 데이터를 문자 데이터로 변환하도록 합니다. 현재 en_US(미국 영어) 서식만 사용합니다.

-scolumn_separator_char
열 구분 기호를 지정합니다.

-S [protocol:] server[,port]
연결할 SQL Server 인스턴스의 이름을 지정하거나 -D가 사용된 경우 DSN을 지정합니다. Linux 및 macOS 기반 ODBC 드라이버에는 -S가 필요합니다. tcp만 유효한 프로토콜 값입니다.

-tquery_timeout
명령 또는 SQL 문 시간 제한(초)을 지정합니다.

-u
input_file 형식에 관계없이 output_file이 유니코드 형식으로 저장되도록 지정합니다.

-U
login_id 사용자 로그인 ID를 지정합니다.

-Verror_severity_level
ERRORLEVEL 변수를 설정하는 데 사용되는 심각도를 제어합니다.

-wcolumn_width
출력할 화면 너비를 지정합니다.

-W
열에서 후행 공백을 제거합니다.

-x
변수 대체를 사용하지 않음

-X
명령, 시작 스크립트 및 환경 변수를 사용하지 않습니다.

-yvariable_length_type_display_width
sqlcmd 스크립팅 변수 SQLCMDMAXFIXEDTYPEWIDTH를 설정합니다.

-Yfixed_length_type_display_width
sqlcmd 스크립팅 변수 SQLCMDMAXVARTYPEWIDTH를 설정합니다.

-zpassword
암호를 변경합니다.

-Zpassword
암호 변경 후 종료

사용 가능한 명령

현재 릴리스에서 다음 명령을 사용할 수 있습니다.

  • [:]!!

  • :Connect

  • :Error

  • [:]EXIT

  • GO [count]

  • :Help

  • :List

  • :Listvar

  • :On Error

  • :Out

  • :Perftrace

  • [:]QUIT

  • :r

  • :RESET

  • :setvar

사용할 수 없는 옵션

현재 릴리스에서 다음 옵션을 사용할 수 없습니다.

-A
DAC(관리자 전용 연결)를 사용하여 SQL Server 에 로그인합니다. DAC(관리자 전용 연결)를 만드는 방법에 대한 자세한 내용은 Programming Guidelines을 참조하세요.

-L
로컬로 구성된 서버 컴퓨터와 네트워크상에서 브로드캐스팅하는 서버 컴퓨터의 이름을 나열합니다.

-v
sqlcmd 스크립트에서 사용할 수 있는 sqlcmd 스크립팅 변수를 만듭니다.

다음과 같은 대체 방법을 사용할 수 있습니다. 한 파일에 매개 변수를 저장하여 다른 파일에 추가할 수 있습니다. 이 방법으로 매개 변수 파일을 사용하여 값을 바꿀 수 있습니다. 예를 들어 다음과 같은 내용으로 a.sql(매개 변수 파일)이라는 파일을 만듭니다.

:setvar ColumnName object_id
:setvar TableName sys.objects

그런 다음, 대체할 매개 변수를 사용하여 b.sql이라는 파일을 만듭니다.

select $(ColumnName) from $(TableName)

명령줄에서 다음 명령을 사용하여 a.sqlb.sqlc.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(데이터 원본 이름)을 지정할 수 있습니다. -Dsqlcmd 또는 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에는 DRIVER 항목만 있으면 되지만, 원격 서버에 연결하려면 sqlcmd 또는 bcp에 SERVER 요소의 값이 필요합니다. SERVER 요소가 비어 있거나 DSN에 없는 경우 sqlcmdbcp는 로컬 시스템의 기본 인스턴스에 연결을 시도합니다.

Windows 시스템에서 bcp를 사용하는 경우 SQL Server 2017(14.x) 및 이전 버전에서는 SQL Native Client 11 드라이버(sqlncli11.dll)가 필요하지만 SQL Server 2019 (15.x) 이상에서는 Microsoft ODBC Driver 17 for SQL Server 드라이버(msodbcsql17.dll)가 필요합니다.

동일한 옵션이 DSN 및 sqlcmd 또는 bcp 명령줄에서 지정된 경우 명령줄 옵션이 DSN에서 사용되는 값을 재정의합니다. 예를 들어 DSN에 DATABASE 항목이 있고 sqlcmd 명령줄이 -d를 포함하는 경우 -d에 전달된 값이 사용됩니다. Trusted_Connection=yes가 DSN에서 지정된 경우 Kerberos 인증이 사용되고 사용자 이름( –U) 및 암호( –P)(제공된 경우)가 무시됩니다.

다음 별칭을 정의하여 isql을 호출하는 기존 스크립트는 sqlcmd를 사용하도록 수정할 수 있습니다. alias isql="sqlcmd -D"

참조

bcp를 사용하여 연결
릴리스 정보