sqlcmd 유틸리티

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

sqlcmd 유틸리티를 사용하면 다양한 모드를 사용하여 Transact-SQL 문, 시스템 프로시저, 스크립트 파일을 입력할 수 있습니다.

  • 명령 프롬프트
  • SQLCMD 모드의 쿼리 편집기
  • Windows 스크립트 파일
  • SQL Server 에이전트 작업의 운영 체제(cmd.exe) 작업 단계

참고 항목

Microsoft Entra ID는 Azure AD(Azure Active Directory)의 새 이름이지만, 기존 환경의 중단을 방지하기 위해 UI 필드, 연결 공급자, 오류 코드 및 cmdlet과 같은 일부 하드 코딩된 요소에는 여전히 Azure AD가 남아 있습니다. 이 문서에서는 두 이름을 혼용할 수 있습니다.

설치된 버전 확인

sqlcmd에 두 가지 버전이 있습니다.

  • go-sqlcmd로 스타일이 지정되는 경우가 있는 go-mssqldb 기반 sqlcmd입니다. 이 버전은 SQL Server와 독립적으로 다운로드할 수 있는 독립 실행형 도구입니다.

  • SQL Server 또는 Microsoft 명령줄 유틸리티와 Linux에서 mssql-tools 패키지의 일부에서 사용할 수 있는 ODBC 기반 sqlcmd입니다.

설치한 버전을 확인하려면 명령줄에서 다음 문을 실행합니다.

sqlcmd "-?"
sqlcmd "-?"
sqlcmd -?

새 버전의 sqlcmd(Go)를 사용하는 경우 출력은 다음 예제와 유사합니다.

Version: 1.3.1

버전 확인

sqlcmd --version을 사용하여 설치되는 버전을 확인할 수 있습니다. 버전 1.0.0 이상이 설치되어 있어야 합니다.

참고 항목

SQL Server 2014(12.x) 및 이전 버전의 경우 sqlcmd 유틸리티를 참조하세요.

Linux에서 sqlcmd를 사용하는 방법은 Linux에 sqlcmd 및 bcp 설치를 참조하세요.

Important

패키지 관리자를 통해 sqlcmd(Go)를 설치하면 sqlcmd(ODBC)가 환경 경로의 sqlcmd(Go)로 바뀝니다. 이 내용을 적용하려면 현재 명령줄 세션을 닫고 다시 열어야 합니다. sqlcmd(ODBC)는 제거되지 않으며 실행 파일에 전체 경로를 지정하여 계속 사용할 수 있습니다. PATH 변수를 업데이트 하여 우선 순위를 지정할 수도 있습니다. Windows 11에서 이렇게 하려면 시스템 설정을 열고 정보 > 고급 시스템 설정으로 이동합니다. 시스템 속성이 열리면 [환경 변수] 버튼을 선택합니다. 아래쪽 절반의 시스템 변수에서 [경로]를 선택한 다음 [편집]을 선택합니다. sqlcmd(Go)가 저장되는 위치(기본값은 C:\Program Files\sqlcmd)가 C:\Program Files\Microsoft SQL Server\<version>\Tools\Binn 앞에 나열된 경우 sqlcmd(Go)가 사용됩니다. sqlcmd(ODBC)를 다시 기본값으로 설정하도록 순서를 되돌릴 수 있습니다.

sqlcmd 다운로드 및 설치

sqlcmd(Go)는 Microsoft Windows, macOS, Linux에서 플랫폼 간 설치가 가능합니다.

Winget(Windows 패키지 관리자 CLI)

  1. 아직 없는 경우 Windows 패키지 관리자 클라이언트를 설치합니다.

  2. 다음 명령을 실행하여 sqlcmd(Go)를 설치합니다.

    winget install sqlcmd
    

Chocolatey

  1. 아직 설치하지 않은 경우 Chocolatey를 설치합니다.

  2. 다음 명령을 실행하여 sqlcmd(Go)를 설치합니다.

    choco install sqlcmd
    

직접 다운로드

  1. GitHub 코드 리포지토리의 sqlcmd(Go) 최신 릴리스에서 해당 -windows-x64.zip 또는 -windows-arm.zip 자산을 다운로드합니다.

  2. 다운로드한 zip 폴더에서 sqlcmd.exe 파일을 추출합니다.

사전 설치

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의 동일한 쿼리를 실행하는 경우 다른 동작이 수행될 수 있습니다.

구문

Usage:
  sqlcmd [flags]
  sqlcmd [command]

Examples:
# Install/Create, Query, Uninstall SQL Server
  sqlcmd create mssql --accept-eula --using https://aka.ms/AdventureWorksLT.bak
  sqlcmd open ads
  sqlcmd query "SELECT @@version"
  sqlcmd delete
# View configuration information and connection strings
  sqlcmd config view
  sqlcmd config cs

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  config      Modify sqlconfig files using subcommands like "sqlcmd config use-context mssql"
  create      Install/Create SQL Server, Azure SQL, and Tools
  delete      Uninstall/Delete the current context
  help        Help about any command
  open        Open tools (e.g ADS) for current context
  query       Run a query against the current context
  start       Start current context
  stop        Stop current context

Flags:
  -?, --?                  help for backwards compatibility flags (-S, -U, -E etc.)
  -h, --help               help for sqlcmd
      --sqlconfig string   configuration file (default "/Users/<currentUser>/.sqlcmd/sqlconfig")
      --verbosity int      log level, error=0, warn=1, info=2, debug=3, trace=4 (default 2)
      --version            print version of sqlcmd

Use "sqlcmd [command] --help" for more information about a command.

sqlcmd 구문 및 사용에 대한 자세한 내용은 ODBC sqlcmd 구문을 참조하세요.

sqlcmd의 호환성이 손상되는 변경(ODBC)

sqlcmd(Go) 유틸리티에서 몇 가지 스위치 및 동작이 변경됩니다. 이전 버전과의 호환성을 위해 누락된 플래그의 최신 목록은 하위 호환 플래그의 구현 우선 순위 지정 GitHub 토론을 참조하세요.

  • 이전 버전의 sqlcmd(Go)에서는 -P 스위치가 일시적으로 제거되고, SQL Server 인증에 대한 암호는 다음 메커니즘을 통해서만 제공이 가능했습니다.

    • SQLCMDPASSWORD 환경 변수
    • :CONNECT 명령
    • 메시지가 표시되면 사용자가 암호를 입력하여 연결을 완료할 수 있습니다.
  • -r에는 0 또는 1 인수가 필요합니다.

  • -R 스위치가 제거되었습니다.

  • -I 스위치가 제거되었습니다. 따옴표 붙은 식별자 동작을 사용하지 않도록 설정하려면 스크립트에 SET QUOTED IDENTIFIER OFF를 추가합니다.

  • -N은 이제 true, false 또는 disable 중 하나가 될 수 있는 문자열 값을 사용하여 암호화 선택을 지정합니다. (default는 매개 변수를 생략하는 것과 같습니다.)

    • -N-C가 제공되지 않으면 sqlcmd는 서버 인증서의 유효성을 검사하지 않고 서버와 인증을 협상합니다.
    • -N이 제공되었지만 -C가 제공되지 않은 경우 sqlcmd에서 서버 인증서의 유효성 검사를 요구합니다. 암호화에 대한 false 값은 여전히 ​​로그인 패킷의 암호화로 이어질 수 있습니다.
    • -N-C가 모두 제공되면 sqlcmd는 암호화 협상에 해당 값을 사용합니다.
    • 클라이언트/서버 암호화 협상에 대한 자세한 내용은 MS-TDS PRELOGIN에서 찾을 수 있습니다.
  • -u 생성된UNICODE 출력 파일에는 UTF-16 Little-Endian BOM(바이트 순서 표시)이 기록됩니다.

  • OSQL과의 호환성을 유지하기 위해 유지되었던 일부 동작(예: 일부 데이터 유형에 대한 열 헤더 맞춤)이 변경될 수 있습니다.

  • 모든 명령은 EXIT를 포함하여 한 줄에 맞아야 합니다. 대화형 모드는 명령에 대해 열려 있는 괄호 또는 따옴표를 확인하지 않으며 연속 줄을 묻는 메시지를 표시하지 않습니다. 이 동작은 EXIT(query)의 쿼리 실행이 여러 줄에 걸쳐 있는 ODBC 버전과 다릅니다.

sqlcmd(Go) 유틸리티의 연결은 TCP 연결로 제한됩니다. 명명된 파이프는 현재 go-mssqldb 드라이버에서 지원되지 않습니다.

개선 사항

  • 이제 :Connect에는 Azure SQL Database에 대한 인증 방법(SqlAuthentication, ActiveDirectoryDefault, ActiveDirectoryIntegrated, ActiveDirectoryServicePrincipal, ActiveDirectoryManagedIdentity, ActiveDirectoryPassword) 중 하나를 선택하는 선택적 -G 매개 변수가 있습니다. 자세한 내용은 Microsoft Entra 인증을 참조하세요. -G가 제공되지 않으면 -U 사용자 이름 매개 변수의 존재 여부에 따라 통합 보안 또는 SQL Server 인증이 사용됩니다.

  • --driver-logging-level 명령줄 매개 변수를 사용하면 go-mssqldb 드라이버에서 추적을 확인할 수 있습니다. 모든 추적을 보려면 64를 사용합니다.

  • sqlcmd는 이제 세로 형식을 사용하여 결과를 인쇄할 수 있습니다. 새 -F vertical 명령줄 스위치를 사용하여 설정합니다. SQLCMDFORMAT 스크립팅 변수도 이를 제어합니다.

명령줄 옵션

-A

DAC(관리자 전용 연결)를 사용하여 SQL Server에 로그인합니다. 이러한 종류의 연결은 서버 문제 해결에 사용됩니다. 이 연결은 DAC를 지원하는 서버 컴퓨터에서만 작동합니다. DAC를 사용할 수 없는 경우 sqlcmd는 오류 메시지를 생성하고 종료됩니다. DAC에 대한 자세한 내용은 데이터베이스 관리자를 위한 진단 연결을 참조하세요. -A 옵션은 -G 옵션에서 지원되지 않습니다. -A를 사용하여 Azure SQL 데이터베이스에 연결하는 경우 논리 SQL Server 관리자여야 합니다. Microsoft Entra 관리자는 DAC를 사용할 수 없습니다.

C-

이 옵션은 클라이언트가 유효성 검사 없이 암시적으로 서버 인증서를 신뢰하도록 구성하는 데 사용됩니다. 이 옵션은 ADO.NET 옵션 TRUSTSERVERCERTIFICATE = true와 동일합니다.

sqlcmd(Go) 유틸리티의 경우 다음 조건도 적용됩니다.

  • -N-C가 제공되지 않으면 sqlcmd는 서버 인증서의 유효성을 검사하지 않고 서버와 인증을 협상합니다.
  • -N이 제공되었지만 -C가 제공되지 않은 경우 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을 설정합니다. sqlcmdis 로그인의 기본 제한 시간은 8초입니다. -G 옵션을 사용하여 Azure SQL 데이터베이스 또는 Azure Synapse Analytics에 연결하고 Microsoft Entra ID를 사용하여 인증하는 경우 최소 30초의 시간 제한 값을 사용하는 것이 좋습니다. 로그인 제한 시간은 065534 사이의 숫자여야 합니다. 입력한 값이 숫자가 아니거나 이 범위에 속하지 않을 경우 sqlcmd에서 오류 메시지를 생성합니다. 0 값은 제한 시간을 무한으로 지정합니다.

E-

사용자 이름과 암호를 사용하는 대신 신뢰할 수 있는 연결을 사용하여 SQL Server에 로그인합니다. 기본적으로 -E가 지정되지 않은 상태에서 sqlcmd가 신뢰할 수 있는 연결 옵션을 사용합니다.

-E 옵션은 가능한 사용자 이름 및 암호 환경 변수 설정(예: SQLCMDPASSWORD)을 무시합니다. -E 옵션과 함께 -U 옵션 또는 -P 옵션을 사용하면 오류 메시지가 생성됩니다.

-g

열 암호화 설정을 Enabled로 설정합니다. 자세한 내용은 Always Encrypted를 참조하세요. Windows 인증서 저장소에 저장된 마스터 키만 지원됩니다. -g 옵션을 사용하려면 sqlcmd 버전 13.1 이상이 필요합니다. 사용 중인 버전을 확인하려면 sqlcmd -?를 실행합니다.

-G

이 옵션은 Azure SQL 데이터베이스 또는 Azure Synapse Analytics에 연결할 때 클라이언트에서 Microsoft Entra 인증을 통해 사용자를 인증하도록 지정하는 데 사용됩니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDUSEAAD = true을 설정합니다. -G 옵션을 사용하려면 sqlcmd 버전 13.1 이상이 필요합니다. 사용 중인 버전을 확인하려면 sqlcmd -?를 실행합니다. 자세한 내용은 Microsoft Entra 인증을 사용하여 SQL Database 또는 Azure Synapse Analytics에 연결을 참조하세요. -A 옵션은 -G 옵션에서 지원되지 않습니다.

-G 옵션은 Azure SQL 데이터베이스 및 Azure Synapse Analytics에만 적용됩니다.

Microsoft Entra 대화형 인증은 현재 Linux 또는 macOS에서 지원되지 않습니다. Microsoft Entra 통합 인증을 사용하려면 Microsoft ODBC Driver 17 for SQL Server 버전 17.6.1 이상과 올바르게 구성된 Kerberos 환경이 필요합니다.

Microsoft Entra 인증에 대한 자세한 내용은 sqlcmd에서 Microsoft Entra 인증을 참조하세요.

-H workstation_name

워크스테이션 이름입니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDWORKSTATION을 설정합니다. 워크스테이션 이름은 sys.sysprocesses카탈로그 뷰의 hostname 열에 나열되며 저장 프로시저 sp_who를 사용하여 반환할 수 있습니다. 이 옵션을 지정하지 않으면 기본값은 현재 컴퓨터 이름입니다. 이 이름을 사용하여 다른 sqlcmd 세션을 식별할 수 있습니다

-j

화면에 원시 오류 메시지를 출력합니다.

-K application_intent

서버에 연결할 때 애플리케이션 작업 유형을 선언합니다. 현재 지원되는 유일한 값은 ReadOnly입니다. -K를 지정하지 않으면 sqlcmd가 가용성 그룹에 있는 보조 복제본에 대한 연결을 지원하지 않습니다. 자세한 내용은 활성 보조: 읽기 가능한 보조 복제본(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은 이제 true, false 또는 disable 중 하나가 될 수 있는 문자열 값을 사용하여 암호화 선택을 지정합니다. (default는 매개 변수를 생략하는 것과 같습니다.)

  • -N-C가 제공되지 않으면 sqlcmd는 서버 인증서의 유효성을 검사하지 않고 서버와 인증을 협상합니다.
  • -N이 제공되었지만 -C가 제공되지 않은 경우 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 환경 변수보다 우선적으로 적용됩니다. 따라서 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.

-P 옵션과 함께 -E옵션을 사용하면 오류 메시지가 생성됩니다.

-P 옵션 다음에 둘 이상의 인수를 지정하면 오류 메시지가 생성되고 프로그램이 종료됩니다.

특수 문자가 포함된 비밀번호는 오류 메시지를 생성할 수 있습니다. -P를 사용할 때 특수 문자를 이스케이프하거나 SQLCMDPASSWORD 환경 변수를 대신 사용해야 합니다.

-S [protocol:]server[\instance_name][,port]

연결할 SQL Server 인스턴스를 지정합니다. sqlcmd 스크립팅 변수 SQLCMDSERVER를 설정합니다.

해당 서버 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결하려면 server_name을 지정합니다. 해당 서버 컴퓨터에 있는 명명된 SQL Server 인스턴스에 연결하려면 server_name[\instance_name]을 지정합니다. 서버 컴퓨터를 지정하지 않으면 sqlcmd가 로컬 컴퓨터에 있는 기본 SQL Server 인스턴스에 연결됩니다. 이 옵션은 네트워크의 원격 컴퓨터에서 sqlcmd를 실행할 때 필요합니다.

protocoltcp(TCP/IP), lpc(공유 메모리) 또는 np(명명된 파이프)일 수 있습니다.

sqlcmd를 시작할 때 server_name[\instance_name]을 지정하지 않으면 SQL Server가 SQLCMDSERVER 환경 변수를 확인하고 사용합니다.

참고 항목

OSQLSERVER 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDSERVER 환경 변수는 OSQLSERVER 환경 변수보다 우선적으로 적용됩니다. 따라서 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.

-U login_id

로그인 이름 또는 포함된 데이터베이스 사용자 이름입니다. 포함된 데이터베이스 사용자의 경우 데이터베이스 이름 옵션(-d)을 제공해야 합니다.

참고 항목

OSQLUSER 환경 변수는 이전 버전과의 호환성을 위해 유지되었습니다. SQLCMDUSER 환경 변수는 OSQLUSER 환경 변수보다 우선적으로 적용됩니다. 따라서 sqlcmdosql을 문제 없이 함께 사용할 수 있으며 이전 스크립트는 계속 작동합니다.

-U 옵션과 -P 옵션을 모두 지정하지 않으면 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는 입력 파일이 UNICODE 파일이 아니면 입력 파일과 출력 파일 모두에 현재 코드 페이지를 사용합니다. 이 경우 변환이 필요하지 않습니다.

  • sqlcmd는 big-endian 및 little-endian UNICODE 입력 파일을 자동으로 인식합니다. -u 옵션을 지정한 경우 출력은 항상 little-endian UNICODE입니다.

  • 출력 파일이 지정되지 않은 경우 출력 코드 페이지는 콘솔 코드 페이지입니다. 이 방식에서는 출력이 콘솔에 올바르게 표시됩니다.

  • 여러 입력 파일이 있는 경우 동일한 코드 페이지를 사용하는 것으로 간주됩니다. UNICODE 및 비 UNICODE 입력 파일을 혼합할 수 있습니다.

명령 프롬프트에 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이 UNICODE 형식으로 저장됩니다. 파일 이름이 잘못된 경우 오류 메시지가 생성되고 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) 유틸리티의 경우 -r0 인수 또는 1 인수가 필요합니다.

-R

적용 대상: ODBC sqlcmd만 해당합니다.

클라이언트의 로캘을 기반으로 SQL Server에서 검색된 숫자, 통화, 날짜 및 시간 열을 sqlcmd에서 지역화합니다. 기본적으로 이러한 열은 서버의 국가별 설정을 사용하여 표시됩니다.

-u

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

참고 항목

sqlcmd(Go) 유틸리티의 경우 생성된 UNICODE 출력 파일에는 UTF-16 Little-Endian BOM(바이트 순서 표시)이 기록됩니다.

쿼리 실행 옵션

-e

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

I-

적용 대상: ODBC sqlcmd만 해당합니다.

SET QUOTED_IDENTIFIER 연결 옵션을 ON으로 설정합니다. 기본적으로 OFF로 설정됩니다. 자세한 내용은 SET QUOTED_IDENTIFIER(Transact-SQL)를 참조하세요.

참고 항목

sqlcmd(Go) 유틸리티에서 따옴표 붙은 식별자 동작을 비활성화하려면 스크립트에 SET QUOTED IDENTIFIER OFF를 추가합니다.

-q "cmdline query"

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 query"

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_timeout165534 사이의 숫자여야 합니다. 입력한 값이 숫자가 아니거나 이 범위에 속하지 않을 경우 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 headers

열 제목 사이에 인쇄할 행 수를 지정합니다. 기본적으로 각 쿼리 결과 집합마다 머리글을 한 번 출력합니다. 이 옵션은 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 값을 반환하도록 지정합니다. SQL Server 오류 메시지의 심각도가 10보다 큰 경우 ERRORLEVEL 변수로 1이 반환되며 그렇지 않은 경우 0이 반환됩니다. -b 외에도 -V 옵션을 설정한 경우 심각도가 -V를 사용하여 설정한 값보다 작으면 sqlcmd는 오류를 보고하지 않습니다. 명령 프롬프트 배치 파일은 ERRORLEVEL 값을 테스트하고 그에 따라 적절히 오류를 처리할 수 있습니다. sqlcmd는 심각도가 10(정보 메시지)인 오류는 보고하지 않습니다.

sqlcmd 스크립트에 잘못된 주석, 구문 오류가 포함되어 있거나 스크립팅 변수가 누락된 경우 반환되는 ERRORLEVEL 값은 1입니다.

-m error_level

stdout에 보낼 오류 메시지를 제어합니다. 심각도가 이 수준보다 크거나 같은 메시지는 보내집니다. 이 값을 -1로 설정하면 정보 메시지를 포함한 모든 메시지가 전송됩니다. -m-1 사이에서 공백이 허용되지 않습니다. 예를 들어 -m-1는 유효하지만 -m -1는 유효하지 않습니다.

또한 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDERRORLEVEL을 설정합니다. 이 변수의 기본값은 0입니다.

-V error_severity_level

ERRORLEVEL 변수를 설정하는 데 사용되는 심각도를 제어합니다. 심각도가 이 값보다 크거나 같은 오류 메시지는 ERRORLEVEL을 설정합니다. 0보다 작은 값은 0으로 보고됩니다. 배치 파일 및 CMD 파일은 ERRORLEVEL 변수의 값을 테스트하는 데 사용할 수 있습니다.

기타 옵션

-a packet_size

다른 크기의 패킷을 요청합니다. 이 옵션은 sqlcmd 스크립팅 변수 SQLCMDPACKETSIZE을 설정합니다. packet_size의 값은 51232767 사이여야 합니다. 기본값은 4096입니다. 패킷 크기가 클수록 GO 명령 간에 Transact-SQL 문이 많은 스크립트 실행을 위한 성능이 향상될 수 있습니다. 더 큰 패킷 크기를 요청할 수 있습니다. 그러나 요청이 거부되면 sqlcmd는 패킷 크기에 대해 서버 기본값을 사용합니다.

-c batch_terminator

일괄 처리 종결자를 지정합니다. 기본적으로 줄에 GO만 단독으로 입력하면 명령이 종료되어 SQL Server로 보내집니다. 배치 종결자를 다시 설정할 때는 앞에 백슬래시가 있더라도 Transact-SQL 예약 키워드 또는 운영 체제와 연관된 특별한 의미를 가진 문자를 사용하지 마세요.

-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)는 기본 운영 체제에 의해 결정됩니다.

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

  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 ""
SQLCMDUSEAAD -G R/W ""

:Connect 사용 시 SQLCMDUSER, SQLCMDPASSWORD, SQLCMDSERVER가 설정됩니다.

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 명령은 콜론(:)으로 접두사를 지정해야합니다.

    Important

    기존 osql 스크립트와 이전 버전과의 호환성을 유지하기 위해 일부 명령은 콜론 없이 인식되며, :로 표시됩니다.

  • sqlcmd 명령은 줄 시작 부분에 나타난 경우에만 인식됩니다.

  • 모든 sqlcmd 명령은 대/소문자를 구분하지 않습니다.

  • 각 명령을 별도의 줄에 입력해야 합니다. 명령 다음에 Transact-SQL 문이나 다른 명령을 입력할 수 없습니다.

  • 명령은 즉시 실행됩니다. Transact-SQL 문과 같이 실행 버퍼에 배치되지 않습니다.

명령 편집

[:]ED

텍스트 편집기를 시작합니다. 이 편집기를 사용하여 현재 Transact-SQL 배치 또는 마지막으로 실행된 배치를 편집할 수 있습니다. 마지막으로 실행된 배치를 편집하려면 마지막 배치 실행을 완료한 후 즉시 ED 명령을 입력해야 합니다.

텍스트 편집기는SQLCMDEDITOR 환경 변수에 의해 정의됩니다. 기본 편집기는 Edit입니다. 편집기를 변경하려면 SQLCMDEDITOR 환경 변수를 설정합니다. 예를 들어 편집기를 Microsoft 메모장에 설정하려면 명령 프롬프트에서 다음을 입력합니다.

SET SQLCMDEDITOR=notepad

[:]RESET

문 캐시를 지웁니다.

List:

문 캐시 내용을 출력합니다.

variables

:Setvar <var> [ "value" ]

sqlcmd 스크립팅 변수를 정의합니다. 스크립팅 변수의 형식은 다음과 같습니다. $(VARNAME)

변수 이름은 대/소문자를 구분하지 않습니다.

스크립팅 변수는 다음과 같은 방법으로 설정할 수 있습니다.

  • 명령줄 옵션을 사용하여 암시적으로 설정합니다. 예를 들어 -l 옵션은 SQLCMDLOGINTIMEOUTsqlcmd 변수를 설정합니다.

  • :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 <filename> | STDERR | STDOUT

쿼리 결과를 만들어 파일 이름으로 지정된 파일, stderr 또는 stdout로 모두 리디렉션합니다. 기본적으로 출력은 stdout로 전달됩니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 스크립트에서 :Out 명령이 여러 번 나타날 수 있습니다.

:Perftrace <filename> | STDERR | STDOUT

성능 추적 정보를 만들고 파일 이름으로 지정된 파일, stderr 또는 stdout로 모두 리디렉션합니다. 기본적으로 성능 추적 출력은 stdout로 전달됩니다. 파일이 이미 있는 경우 0바이트로 잘립니다. 스크립트에서 :Perftrace 명령이 여러 번 나타날 수 있습니다.

실행 제어 명령

:On Error [ exit | ignore ]

스크립트 또는 배치 실행 중에 오류가 발생할 때 수행할 작업을 설정합니다.

exit 옵션을 사용하면 sqlcmd가 적절한 오류 값과 함께 종료됩니다.

ignore 옵션을 사용하는 경우 sqlcmd는 오류를 무시하고 배치 또는 스크립트를 계속 실행합니다. 기본적으로 오류 메시지가 출력됩니다.

[:]QUIT

sqlcmd가 종료됩니다.

[:]EXIT [ ( statement ) ]

SELECT 문 결과를 sqlcmd의 반환 값으로 사용할 수 있습니다. 숫자인 경우 마지막 결과 행의 첫 번째 열이 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 스크립트 내에서 RAISERROR을 사용하고 상태가 127인 경우 sqlcmd는 종료되고 메시지 ID를 클라이언트에 다시 반환합니다. 예시:

RAISERROR(50001, 10, 127)

이 오류가 발생하면 sqlcmd 스크립트가 종료되고 메시지 ID 50001이 클라이언트에 반환됩니다.

SQL Server에서 반환 값 -1~-99를 예약하고 sqlcmd는 다음과 같은 추가 반환 값을 정의합니다.

반환 값 설명
100- 반환 값을 선택하기 전에 오류가 발생했습니다.
-101 반환 값을 선택할 때 행을 찾을 수 없습니다.
-102 반환 값을 선택할 때 변환 오류가 발생했습니다.

GO [count]

GO는 배치의 끝과 캐시된 Transact-SQL 문의 실행을 모두 신호로 표시합니다. 배치는 별도의 배치로 여러 번 실행됩니다. 단일 배치에서 변수를 두 번 이상 선언할 수 없습니다.

기타 명령

:r <filename>

filename으로 지정된 파일의 추가 Transact-SQL 문과 sqlcmd 명령을 명령문 캐시로 구문 분석합니다. filenamesqlcmd가 실행된 시작 디렉터리를 기준으로 읽습니다.

파일에 Transact-SQL 문이 포함되어 있고 뒤에 GO가 오지 않을 경우 :r 뒤에 오는 줄에 GO를 입력해야 합니다.

배치 종결자가 발생한 후 파일을 읽고 실행합니다. 여러 :r 명령을 실행할 수 있습니다. 파일에는 배치 종결자 GO를 포함한 모든 sqlcmd 명령이 포함될 수 있습니다.

참고 항목

대화형 모드로 표시되는 줄 수는 발생한 모든 :r 명령에 대해 하나씩 증가합니다. :r 명령은 리스트 명령의 출력에 표시됩니다.

:ServerList

로컬로 구성된 서버와 네트워크에서 브로드캐스팅 중인 서버의 이름을 나열합니다.

:Connect server_name[\instance_name] [-l timeout] [-U user_name [-P password]]

SQL Server 인스턴스에 연결합니다. 또한 현재 연결을 종료합니다.

제한 시간 옵션:

동작
0 무기한 대기
n>0 n 초 동안 대기

SQLCMDSERVER 스크립팅 변수는 현재 활성 연결을 반영합니다.

시간 제한을 지정하지 않으면 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 출력 형식JSON 출력 형식을 참조하세요.

도움말:

sqlcmd 명령과 각 명령에 대한 간단한 설명을 표시합니다.

sqlcmd 파일 이름

-i 옵션 또는 :r 명령을 사용하여 sqlcmd 입력 파일을 지정할 수 있습니다. 출력 파일은 -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 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 명령을 사용합니다.

:XML OFF 명령이 sqlcmd를 행 기반 출력으로 다시 전환하므로 :XML OFF 명령이 실행되기 전에 GO 명령을 표시해서는 안 됩니다.

XML(스트리밍) 데이터 및 행 집합 데이터는 혼합할 수 없습니다. XML 스트림을 출력하는 Transact-SQL 문이 실행되기 전에 :XML ON 명령이 실행되지 않은 경우 출력이 왜곡됩니다. :XML ON 명령이 실행되면 일반 행 집합을 출력하는 Transact-SQL 문을 실행할 수 없습니다.

참고 항목

:XML 명령은 SET STATISTICS XML 문을 지원하지 않습니다.

JSON 출력 형식

JSON 출력이 예상되면 :XML ON 명령을 사용합니다. 그렇지 않으면 출력에 열 이름과 JSON 텍스트가 모두 포함됩니다. 이 출력은 유효한 JSON이 아닙니다.

XML 모드를 해제로 설정하려면 :XML OFF 명령을 사용합니다.

자세한 내용은 이 문서의 XML 출력 형식을 참조하세요.

Microsoft Entra 인증 사용

다음 예제는 Microsoft Entra 인증을 사용합니다.

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 세션에서 가능한 한 많은 작업을 수행합니다.

  • 배치 또는 쿼리 실행에 대한 제한 시간 값을 배치 또는 쿼리 실행에 예상되는 값보다 높게 설정합니다.

다음 방법을 사용하여 정확성을 극대화합니다.

  • -V16을 사용하여 심각도 16 수준 메시지를 기록합니다. 심각도 16 메시지는 사용자가 해결할 수 있는 일반 오류를 나타냅니다.

  • 프로세스가 종료된 후 종료 코드 및 DOS ERRORLEVEL 변수를 확인합니다. sqlcmd0을 정상적으로 반환하며, 그렇지 않으면 ERRORLEVEL-V의 구성대로 설정합니다. 즉, ERRORLEVEL은 SQL Server에서 보고된 오류 번호와 같은 값이 되어서는 안 됩니다. 오류 번호는 시스템 함수 @@ERROR에 해당하는 SQL Server 관련 값입니다. ERRORLEVELsqlcmd를 종료하는 이유를 나타내는 sqlcmd 관련 값입니다. 이 값은 -b 명령줄 인수 지정에 따라 영향을 받습니다.

종료 코드와 DOS ERRORLEVEL을 확인하면서 -V16을 사용하면 자동화된 환경의 오류, 특히 프로덕션 릴리스 이전의 품질 게이트를 쉽게 파악할 수 있습니다.