Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Относится к:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Аналитическая платформа (PDW)
SQL база данных в Microsoft Fabric
Используйте служебную программу sqlcmd для ввода инструкций Transact-SQL, системных процедур и файлов скриптов с помощью различных режимов:
- В командной строке.
- В редакторе запросов в режиме SQLCMD.
- В файле скрипта Windows.
- На шаге задания операционной системы (
cmd.exe) агент SQL Server задания.
Note
Хотя идентификатор Microsoft Entra — это новое имя Azure Active Directory (Azure AD), чтобы предотвратить нарушение существующих сред, Azure AD по-прежнему остается в некоторых жестко закодированных элементах, таких как поля пользовательского интерфейса, поставщики подключений, коды ошибок и командлеты. В этой статье два имени являются взаимозаменяемыми.
Варианты sqlcmd
Существуют два варианта sqlcmd :
sqlcmd (Go):
go-mssqldb-версия sqlcmd, иногда стилизуется как go-sqlcmd. Эта версия является автономным инструментом, который можно скачать независимо от SQL Server. Он работает в Windows, macOS, Linux и в контейнерах.sqlcmd (ODBC): адаптированный к платформе, sqlcmd на основе ODBC, доступный с SQL Server или служебными программами командной строки Microsoft, а также как часть пакета
mssql-toolsв Linux. Он также работает в Windows, macOS, Linux и в контейнерах.
Чтобы узнать, какой вариант и версия sqlcmd установлены в системе, см. статью "Проверка установленной версии служебной программы sqlcmd".
Сведения о том, как получить sqlcmd, см. в разделе "Скачать и установить служебную программу sqlcmd".
Поддержка TDS 8.0
SQL Server 2025 (17.x) предоставляет поддержку TDS 8.0 для служебной программы sqlcmd .
Syntax
В этой статье термины опция, параметр, аргумент командной строки и переключатель используются взаимозаменяемо.
в sqlcmd (Go) есть два режима справки: --help для современных вложенных команд и -? флагов, совместимых с ODBC.
Современные команды (--help)
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.
Флаги, совместимые с ODBC (-?)
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
-e (echo input)
-E (use trusted connection)
-F hostname_in_certificate
-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, always on)
-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 (always enabled)
-N[s|m|o] (encrypt connection)
-o output_file
-P password
-q "cmdline query"
-Q "cmdline query" (and exit)
-r[0 | 1] (msgs to stderr)
-R (ignored, client regional settings not used)
-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)
--authentication-method (Azure SQL authentication method)
--driver-logging-level (mssql driver log level)
--vertical (print results in vertical format)
-? (usage)
Критические изменения из sqlcmd (ODBC)
Несколько параметров и функций имеют отличия в служебной программе sqlcmd (Go). Для получения наиболее актуального списка отсутствующих флагов для обратной совместимости, см. обсуждение GitHub «Приоритизация реализации флагов обратной совместимости».
sqlcmd (Go) поддерживает
-Pкоммутатор. Для проверки подлинности SQL Server можно указать пароли с помощью следующих механизмов:- Переключатель командной
-Pстроки - Переменная среды
SQLCMDPASSWORD - Команда
:CONNECT - При появлении запроса введите пароль для завершения подключения
- Переключатель командной
Для переключателя
-rтребуется аргумент0или1.Переключатель
-Rигнорируется. Среда выполнения Go не предоставляет доступ к информации о локали пользователя.Переключатель
-Iигнорируется. Идентификаторы с кавычками всегда включены. Чтобы отключить поведение идентификатора с разделителем, добавьте в скриптыSET QUOTED IDENTIFIER OFF.Переключатель
-Mигнорируется. sqlcmd (Go) всегда включает отказоустойчивость в среде с несколькими подсетями.Принимает
-Nстроковое значение, чтобы указать выбор шифрования, который является одним изs[trict],t[rue]/m[andatory]/yes/1o[ptional]/no/0/f[alse]или.disable- Если вы не предоставляете
-Nи-Csqlcmd согласовывает проверку подлинности с сервером без проверки сертификата сервера. - Если вы предоставляете
-N, но нет-C, sqlcmd требует проверки сертификата сервера.falseЗначение шифрования по-прежнему может привести к шифрованию пакета входа. - Если вы предоставляете оба
-Nи-C, sqlcmd использует их значения для согласования шифрования. - Дополнительные сведения о согласовании шифрования клиента и сервера см. в MS-TDS PRELOGIN.
Important
В SQL Server 2025 (17.x)
-Nможет бытьo(дляoptional),m(дляmandatory, по умолчанию) илиs(дляstrict). Если вы не включаете-N,-Nm(дляmandatory) является значением по умолчанию. Это критическое изменение с SQL Server 2022 (16.x) и более ранних версий.- Если вы не предоставляете
-uС помощью коммутатора созданный выходной файл Юникода префиксируется с помощью метки порядка байтов uTF-16 (BOM).Некоторые поведения, которые были сохранены для обеспечения совместимости с
OSQL, могли измениться, например выравнивание заголовков столбцов для некоторых типов данных.Все команды должны помещаться в одну строку, даже
EXIT. Интерактивный режим не проверяет наличие открытых скобок или кавычек для команд и не запрашивает последовательные строки. Это поведение отличается от версии ODBC, которая позволяет выполненномуEXIT(query)запросу охватывать несколько строк.
sqlcmd (Go) поддерживает общую память, именованные каналы и транспорт TCP. Используйте соответствующий префикс протокола на имени сервера для принудительного применения протокола:
-
lpcдля общей памяти (только localhost) -
npдля именованных каналов или используйте UNC именованный путь к каналу в качестве имени сервера. -
tcpдля TCP
Если протокол не указан, sqlcmd пытается выполнить вызов в следующем порядке: lpc>np>tcp При подключении к удаленному узлу lpc пропускается.
Enhancements
:Connectимеет необязательный-Gпараметр, чтобы выбрать один из методов проверки подлинности для базы данных SQL Azure —SqlAuthentication,ActiveDirectoryDefault,ActiveDirectoryIntegrated,ActiveDirectoryServicePrincipalActiveDirectoryManagedIdentity.ActiveDirectoryPasswordДополнительные сведения см. в разделе Аутентификация с помощью идентификатора Microsoft Entra в sqlcmd. Если-Gэто не указано, используется встроенная безопасность или проверка подлинности SQL Server в зависимости от наличия-Uпараметра имени пользователя.Параметр командной строки
--driver-logging-levelпозволяет просматривать трассировки от драйвераgo-mssqldb. Для просмотра всех трассировок используйте64.sqlcmd (Go) может распечатать результаты с помощью вертикального формата. Используйте переключатель командной строки
--vertical, чтобы задать его. ПеременнаяSQLCMDFORMATскрипта также управляет ею.
Параметры командной строки
В следующей таблице перечислены параметры командной строки, доступные в sqlcmd, и какие операционные системы они поддерживают.
Параметры, связанные с входом
-A
Применяется только к Windows. Linux и macOS не поддерживаются.
Войдите в SQL Server с помощью выделенного подключения администратора (DAC). Используйте это подключение для устранения неполадок с сервером. Это подключение работает только с серверными компьютерами, поддерживающими выделенное административное подключение (DAC). Если DAC недоступен, sqlcmd создает сообщение об ошибке, а затем завершает работу. Дополнительные сведения о DAC см. в разделе "Диагностика подключения для администраторов баз данных". Параметр -A не поддерживается с параметром -G . При подключении к базе данных SQL Azure с помощью -Aнеобходимо быть администратором на логическом сервере SQL Server. DAC недоступен для администратора Microsoft Entra.
Note
Сведения о том, как сделать подключение к выделенному администратору (DAC) в macOS или Linux, см. в руководствах по программированию.
-C
Используйте этот параметр, чтобы настроить клиент для неявного доверия сертификату сервера без проверки. Этот параметр аналогичен параметру ADO.NET TRUSTSERVERCERTIFICATE = true.
Для служебной программы sqlcmd (Go) также применяются следующие условия:
- Если вы не предоставляете
-Nи-Csqlcmd согласовывает проверку подлинности с сервером без проверки сертификата сервера. - Если вы предоставляете
-N, но нет-C, sqlcmd требует проверки сертификата сервера.falseЗначение шифрования по-прежнему может привести к шифрованию пакета входа. - Если вы предоставляете оба
-Nи-C, sqlcmd использует их значения для согласования шифрования.
-d db_name
Выдает инструкцию USE <db_name> при запуске sqlcmd. Этот параметр задает . Этот параметр задает начальную базу данных. По умолчанию свойство default-database имени входа. Если база данных не существует, создается сообщение об ошибке и sqlcmd завершает работу.
-D
Интерпретирует имя сервера, предоставленное -S как dsN, вместо имени узла. Дополнительные сведения см. в статье о поддержке DSN в sqlcmd и bcp.
Note
Этот -D параметр доступен только в клиентах Linux и macOS. В клиентах Windows он ссылается на устаревший параметр, который удаляется и игнорируется.
-l login_timeout
Задает время ожидания (в секундах) при подключении программы sqlcmd через драйвер ODBC при попытке соединения с сервером. Этот параметр задает . Время ожидания по умолчанию для входа в sqlcmd составляет 8 секунд. При использовании -G параметра подключения к базе данных SQL Azure или Azure Synapse Analytics и аутентификации с помощью идентификатора Microsoft Entra рекомендуется время ожидания не менее 30 секунд. Время ожидания входа должно быть числом между 0 и 65534. Если значение не является числовым или не попадает в этот диапазон, sqlcmd создает сообщение об ошибке. Значение, указывающее 0 время ожидания, которое должно быть бесконечным.
-E
Для входа в SQL Server вместо имени пользователя и пароля использует доверительное соединение. По умолчанию без -E указания sqlcmd использует параметр доверенного подключения.
Этот -E параметр игнорирует возможные параметры переменной среды пользователя и среды паролей, например SQLCMDPASSWORD.
-E Если параметр используется вместе с -U параметром или -P параметром, создается сообщение об ошибке.
Note
Дополнительные сведения о создании доверенных подключений, использующих встроенную проверку подлинности из клиента Linux или macOS, см. в разделе "Использование встроенной проверки подлинности".
-F hostname_in_certificate
Указывает другое, ожидаемое общее имя (CN) или альтернативное имя субъекта (SAN) в сертификате сервера для использования во время проверки сертификата сервера. Без этого параметра проверка сертификатов гарантирует, что CN или SAN в сертификате совпадает с именем сервера, к которому выполняется подключение. Этот параметр можно использовать, если имя сервера не соответствует CN или SAN, например при использовании псевдонимов DNS.
Рассмотрим пример.
sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -F server01.adventure-works.com
Note
sqlcmd (Go) также используется -F для указания имени узла в сертификате сервера. Для печати результатов в вертикальном формате sqlcmd (Go) вместо этого использует переключатель --vertical .
-g
Задает для параметра Enabledшифрования столбцов значение . Дополнительные сведения см. в разделе Постоянное шифрование. Поддерживаются только главные ключи, хранящиеся в хранилище сертификатов Windows. Для -g этого параметра требуется по крайней мере sqlcmd версии 13.1. Чтобы определить версию, выполните команду sqlcmd -?.
-G
Используйте этот параметр для проверки подлинности с помощью Microsoft Entra при подключении к базе данных SQL Azure или Azure Synapse Analytics. Этот параметр задает . Для -G этого параметра требуется по крайней мере sqlcmd версии 13.1. Чтобы определить версию, выполните команду sqlcmd -?. Дополнительные сведения см. в статье Microsoft Entra authentication for Azure SQL. Параметр -A не поддерживается с параметром -G .
Параметр -G применяется только для Базы данных SQL Azure и Azure Synapse Analytics.
Интерактивная проверка подлинности Microsoft Entra в настоящее время не поддерживается в Linux или macOS. Для встроенной проверки подлинности Microsoft Entra требуется скачать драйвер ODBC для SQL Server версии 17.6.1 или более поздней версии и правильно настроенную среду Kerberos.
Дополнительные сведения о проверке подлинности Microsoft Entra см. в разделе Аутентификация с помощью идентификатора Microsoft Entra в sqlcmd.
-H workstation_name
Имя рабочей станции. Этот параметр задает . Имя рабочей станции отображается в hostname столбце sys.sysprocesses представления каталога и может быть возвращено с помощью хранимой sp_who процедуры. Если этот параметр не указан, по умолчанию используется текущее имя компьютера. Используйте это имя для идентификации различных сеансов sqlcmd .
-j
Выводит необработанные сообщения об ошибках на экран.
-J сертификат_сервера
Применяется только кsqlcmd (ODBC), Linux и macOS. Windows не поддерживается.
Указывает путь к файлу сертификата сервера. Этот файл сопоставляется с сертификатом шифрования подключения сервера. Совпадение выполняется взамен стандартной верификации сертификата (срок действия, имя хоста, цепочка доверия и т. д.). Допустимые форматы сертификатов: PEM, DER и CER.
Используйте этот параметр при подключении к серверам, использующие самозаверяющие сертификаты или сертификаты, выданные частным центром сертификации. Если шифрование включено и проверка сертификата завершается ошибкой, подключение не удается.
Рассмотрим пример.
sqlcmd -S server01 -Q "SELECT TOP 100 * FROM WideWorldImporters.Sales.Orders" -A -Ns -J /etc/ssl/certs/server_certificate.cer
-К application_intent
Объявляет тип рабочей нагрузки приложения при соединении с сервером. Единственным поддерживаемым в настоящее время значением является ReadOnly. Если не указано -K, sqlcmd не поддерживает подключение к вторичной реплике в группе доступности. Дополнительные сведения см. в разделе «Перенос рабочей нагрузки только для чтения на вторичную реплику группы доступности Always On».
Note
-K не поддерживается в SUSE Linux Enterprise Server (SLES). Однако можно указать ключевое слово ApplicationIntent=ReadOnly в файле DSN, переданном в sqlcmd. Дополнительные сведения см. в разделе Поддержка DSN в sqlcmd и bcp далее в этой статье.
Дополнительные сведения см. в статье "Высокий уровень доступности и аварийное восстановление" в Linux и macOS.
-M multisubnet_failover
Всегда указывать -M при подключении к прослушивателю группы доступности группы доступности SQL Server или экземпляру отказоустойчивого кластера SQL Server.
-M обеспечивает более быстрое обнаружение активного (в данный момент) сервера и соединение с ним. Если вы не укажете -M, -M отключен.
Дополнительные сведения можно найти здесь
- Подключитесь к прослушивателю группы доступности Always On
- Справочник по созданию и настройке групп доступности AlwaysOn
- Отказоустойчивая кластеризация и группы доступности AlwaysOn (SQL Server)
- Перенос рабочей нагрузки только для чтения на вторичную реплику группы доступности Always On
Note
-M не поддерживается в SUSE Linux Enterprise Server (SLES). Однако можно указать ключевое слово MultiSubnetFailover=Yes в файле DSN, переданном в sqlcmd. Дополнительные сведения см. в разделе Поддержка DSN в sqlcmd и bcp далее в этой статье.
Дополнительные сведения см. в статье "Высокий уровень доступности и аварийное восстановление" в Linux и macOS.
-N[s|m|o]
Клиент использует этот параметр для запроса зашифрованного подключения.
Параметр -N может быть o (для optional), m (для mandatory, по умолчанию) или s (для strict). Если вы не включаете -N, значение по умолчанию — -Nm (для mandatory). Это критическое изменение по сравнению с SQL Server 2022 (16.x) и более ранними версиями, где значение по умолчанию - это -No.
Для служебной программы sqlcmd (Go) принимается строковое значение, которое может быть одним из следующих вариантов: -N, true, или false для указания выбора шифрования. (default совпадает с пропуском параметра):
Если вы не предоставляете
-Nи-Csqlcmd согласовывает проверку подлинности с сервером без проверки сертификата сервера.Если вы предоставляете
-N, но нет-C, sqlcmd требует проверки сертификата сервера.falseЗначение шифрования по-прежнему может привести к шифрованию пакета входа.Если вы предоставляете оба
-Nи-C, sqlcmd использует их значения для согласования шифрования.
- P-пароль
Указанный пользователем пароль. В паролях учитывается регистр символов. Если вы используете параметр -U, но не используете параметр -P или не задаете переменную среды SQLCMDPASSWORD, sqlcmd предложит пользователю ввести пароль. Не используйте пароль NULL (пустой), но можно указать пароль NULL с помощью пары смежных двойных кавычки для значения параметра ("").
Important
Использование -P небезопасно. Не указываете пароль в командной строке. Кроме того, используйте SQLCMDPASSWORD переменную среды или в интерактивном режиме введите пароль, опустив -P параметр.
Используйте надежный пароль.
Запрос на ввод пароля выводится на консоль следующим образом: Password:.
Вводимые пользователем данные на экране не отображаются, то есть символы не выводятся и курсор остается на месте.
Переменная SQLCMDPASSWORD среды позволяет задать пароль по умолчанию для текущего сеанса. Поэтому пароли не должны быть жестко закодированы в пакетные файлы. В следующем примере сначала устанавливается SQLCMDPASSWORD переменная в командной строке, а затем обращается к служебной программе sqlcmd .
В командной строке введите следующую команду. Замените <password> допустимым паролем.
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
SET SQLCMDPASSWORD=<password>
sqlcmd
Если обнаружено неверное сочетание имени пользователя и пароля, выдается сообщение об ошибке.
Note
Переменная OSQLPASSWORD среды хранится для обратной совместимости. Переменная SQLCMDPASSWORD среды имеет приоритет над переменной OSQLPASSWORD среды. То есть программы sqlcmd и osql могут применяться одновременно, не мешая друг другу. Старые скрипты продолжают работать.
При использовании опции -P и опции -E создается сообщение об ошибке.
Если вы используете -P параметр с несколькими аргументами, создается сообщение об ошибке и программа завершает работу.
Пароль, содержащий специальные символы, может создать сообщение об ошибке. Вместо этого следует экранировать специальные символы при использовании -Pили использовать SQLCMDPASSWORD переменную среды.
В Linux и macOS, когда используется параметр -G без -U, -P указывает на файл, содержащий токен доступа (версия 17.8+). Файл токена должен находиться в формате UTF-16LE (без BOM).
Токены доступа можно получить через различные способы. Необходимо убедиться, что токен доступа является правильным байт к байту, поскольку он отправляется as-is. В следующем примере команда получает маркер доступа. Команда использует команды 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
-S [протокол:]server[\instance_name][,port]
Указывает экземпляр SQL Server, к которому выполняется подключение. Этот параметр задает .
Укажите значение имя_сервера, чтобы подключиться к экземпляру SQL Server по умолчанию на этом сервере. Укажите server_name[\instance_name], чтобы подключиться к именованный экземпляр SQL Server на этом сервере. Если не указать серверный компьютер, sqlcmd подключается к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр необходим при запуске sqlcmd с удаленного компьютера в сети.
протокол может быть tcp (TCP/IP), lpc (общая память) или np (именованные каналы).
Если при запуске sqlcmd
Note
Переменная OSQLSERVER среды хранится для обратной совместимости. Переменная SQLCMDSERVER среды имеет приоритет над переменной OSQLSERVER среды. То есть программы sqlcmd и osql могут применяться одновременно, не мешая друг другу. Старые скрипты продолжают работать.
Для драйвера ODBC в Linux и macOS требуется -S. Единственным допустимым значением протокола является tcp.
-U login_id
Имя входа или имя пользователя автономной базы данных. Для пользователей автономной базы данных необходимо указать параметр имени базы данных (-d).
Note
Переменная OSQLUSER среды хранится для обратной совместимости. Переменная SQLCMDUSER среды имеет приоритет над переменной OSQLUSER среды. То есть программы sqlcmd и osql могут применяться одновременно, не мешая друг другу. Старые скрипты продолжают работать.
Если параметр или -U параметр не задан-P, sqlcmd пытается подключиться с помощью режима проверки подлинности Windows. При этом используется учетная запись пользователя Windows, который запустил программу sqlcmd.
Если вы используете -U параметр с параметром -E (описанным далее в этой статье), создается сообщение об ошибке.
-U Если за параметром следует несколько аргументов, создается сообщение об ошибке и программа завершает работу.
-z new_password
Измените пароль. Замените <oldpassword> старым паролем и <newpassword> новым паролем.
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
sqlcmd -U someuser -P <oldpassword> -z <newpassword>
-Z new_password
Измените пароль и выход. Замените <oldpassword> старым паролем и <newpassword> новым паролем.
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
sqlcmd -U someuser -P <oldpassword> -Z <newpassword>
Параметры ввода и вывода
-f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage]
Задает входные и выходные кодовые страницы. Номер кодовой страницы — это числовое значение, которое определяет установленную кодовую страницу Windows.
Правила преобразования кодовой страницы:
Если кодовая страница не указана, sqlcmd использует текущую кодовую страницу для входных и выходных файлов, если входной файл не является файлом Юникода, в этом случае преобразование не требуется.
Программаsqlcmd автоматически распознает входные файлы в Юникоде как с прямым, так и с обратным порядком байтов. Если вы указываете параметр
-u, выходные данные всегда записываются в формате Unicode с младшим порядком байтов.Если выходной файл не указан, выходная кодовая страница является кодовой страницей консоли. Такой подход обеспечивает корректное отображение данных на консоли.
Предполагается, что несколько входных файлов используют одну и ту же кодовую страницу. Входные файлы в Юникоде и не в Юникоде можно обрабатывать вместе.
Введите chcp в командной строке, чтобы проверить кодовую страницу cmd.exe.
Note
В Linux кодовая страница — это числовое значение, указывающее установленную кодовую страницу Linux (доступно с 17.5.1.1).
-i input_file[,input_file2...]
Определяет файл, содержащий пакет инструкций Transact-SQL или хранимых процедур. Можно указать несколько файлов, которые sqlcmd считывает и обрабатывает в порядке. Не используйте пробелы между именами файлов.
Sqlcmd сначала проверяет, существуют ли все указанные файлы. Если один или несколько файлов не существуют, sqlcmd завершает работу. Вариант -i и -Q/-q параметры являются взаимоисключающими.
Note
Если вы используете -i параметр, за которым следует один или несколько дополнительных параметров, необходимо использовать пробел между параметром и значением. Это требование является известной проблемой в sqlcmd (Go).
Примеры пути:
-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 файл_вывода
Указывает файл, получающий выходные данные программы sqlcmd.
Если вы указываете -u, sqlcmd сохраняет output_file в Юникод формате. Если имя файла недопустимо, sqlcmd создает сообщение об ошибке и завершает работу.
sqlcmd не поддерживает одновременную запись нескольких процессов sqlcmd в один файл. Если это произойдет, рассмотрите поврежденные или неверные выходные данные файла. Этот -f параметр также относится к форматам файлов.
sqlcmd создает этот файл, если он не существует.
sqlcmd перезаписывает файл с тем же именем из предыдущего сеанса. Указанный здесь файл не является файлом stdout . Если указать stdout файл, sqlcmd не использует этот файл.
Примеры пути:
-o C:< filename>
-o \\<Server>\<Share$>\<filename>
-o "C:\Some Folder\<file name>"
Пути к файлам, содержащие пробелы, необходимо заключать в кавычки.
-r[0 | 1]
Перенаправляет выходные данные сообщения об ошибке на экран (stderr). Если параметр не указан или 0указан, перенаправлены только сообщения об ошибках с уровнем серьезности 11 или выше. При указании 1все выходные данные сообщения об ошибке, включая PRINT перенаправление. Этот параметр не действует, если вы используете -o. По умолчанию сообщения отправляются в stdout.
Note
Для служебной (Go) требуется -r аргумент или 0 аргумент.
-R
Применяется только кsqlcmd (ODBC).
Указывает sqlcmd, что локализация в столбцах числовых и денежных данных, значений даты и времени, полученных из SQL Server, должна выполняться с учетом языка и региональных параметров клиента. По умолчанию эти столбцы отображаются с использованием региональных параметров сервера.
Note
На Linux и macOS -R в настоящее время используется только форматирование по стандарту en_US (английский США).
-u
Указывает, что выходной_файл хранится в Юникоде независимо от формата файла входной_файл.
Note
Для служебной программы sqlcmd (Go) созданный выходной файл Юникода префиксируется с помощью метки порядка байтов (BOM) UTF-16.
Параметры выполнения запроса
-e
Записывает входные скрипты на стандартное выходное устройство (stdout).
-I
Применяется только кsqlcmd (ODBC).
SET QUOTED_IDENTIFIER Задает для параметра подключения значение ON. Значение по умолчанию равно OFF. Дополнительные сведения см. в описании SET QUOTED_IDENTIFIER.
Note
Чтобы отключить поведение кавычек идентификатора в служебной программе sqlcmd (Go), добавьте SET QUOTED IDENTIFIER OFF в скрипты.
-q "запрос командной строки"
Выполняет запрос при запуске sqlcmd , но не завершает sqlcmd после завершения запроса. Можно выполнить несколько запросов, разделенных точкой с запятой. Заключайте запрос в кавычки, как показано в следующем примере.
В командной строке введите:
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -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 AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"
sqlcmd -d AdventureWorks2025 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';"
sqlcmd -d AdventureWorks2025 -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). Этот параметр задает . Если не указать значение query_timeout , команда не истекает. Query_timeout должно быть числом между 1 и 65534. Если вы предоставляете значение, которое не является числовым или не попадает в этот диапазон, sqlcmd создает ошибку.
Note
Фактическое значение времени ожидания может отличаться от указанного значения query_timeout на несколько секунд.
-v var = value [ var = value... ]
Применяется только к Windows. Linux и macOS не поддерживаются.
Создает переменную скрипта 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 не должна обрабатывать переменные скрипта. Этот параметр полезен, если скрипт содержит множество операторов INSERT, которые могут содержать строки, имеющие тот же формат, что и обычные переменные, например $(<variable_name>).
Параметры формата
-h заголовки
Указывает количество строк для печати между заголовками столбцов. Параметр по умолчанию печатает заголовки один раз для каждого набора результатов запроса. Этот параметр задает . Используется -1 для указания того, что заголовки не печатаются. Недопустимое значение приводит sqlcmd к созданию сообщения об ошибке и выходу из него.
-k [1 | 2]
Удаляет из выходных данных все управляющие символы, такие как символы табуляции и символы новой строки. Этот параметр сохраняет формат столбцов при возврате данных.
-
-kудаляет управляющие символы. -
-k1заменяет каждый символ элемента управления пробелом. -
-k2заменяет последовательные символы элемента управления одним пробелом.
-s col_separator
Задает символ-разделитель столбцов. Значением по умолчанию является пробел. Этот параметр задает . Чтобы использовать символы, имеющие особое значение для операционной системы, например амперсанд (&) или точку с запятой (;), заключите символ в кавычки ("). Разделитель столбцов может быть любым 8-разрядным символом.
-w screen_width
Задает ширину экрана для вывода. Этот параметр задает . Ширина столбца должна быть больше 8 и меньше 65536. Если указанная ширина столбца не попадает в этот диапазон, sqlcmd создает сообщение об ошибке. Ширина по умолчанию составляет 80 символов. Когда строка вывода превышает указанную ширину столбца, вывод переносится на следующую строку.
-W
Удаляет конечные пробелы из столбца. Используйте этот параметр вместе с параметром -s при подготовке данных, которые вы хотите экспортировать в другое приложение. Нельзя использовать с параметрами или -y параметрами-Y.
-y variable_length_type_display_width
Задает переменную скрипта sqlcmdSQLCMDMAXVARTYPEWIDTH. Значение по умолчанию — 256. Ограничивает число символов, возвращаемых для больших типов данных переменной длины:
- varchar(max)
- nvarchar(max)
- varbinary(max)
- xml
- определяемые пользователем типы данных (определяемые пользователем)
- text
- ntext
- image
Определяемые пользователем типы могут иметь фиксированную длину в зависимости от реализации. Если фиксированная длина UDT короче display_width, то возвращаемое значение UDT не изменяется. Однако если длина превышает значение ширина_отображения, то производится усечение выходных данных.
Caution
-y 0 Используйте этот параметр с крайней осторожностью, так как это может привести к значительным проблемам производительности как на сервере, так и в сети в зависимости от размера возвращаемых данных.
-Y fixed_length_type_display_width
Задает переменную скрипта sqlcmdSQLCMDMAXFIXEDTYPEWIDTH. Значение по умолчанию — ( 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 значение при возникновении ошибки. Значение, возвращаемое sqlcmd переменной ERRORLEVEL , — 1 если сообщение об ошибке SQL Server имеет уровень серьезности больше 10. В противном случае возвращается значение 0. Если вы зададите параметр -V, то, помимо -b, sqlcmd не будет сообщать об ошибке, если уровень серьезности ниже значений, заданных параметром -V. Пакетные файлы командной строки могут тестировать значение ERRORLEVEL и обрабатывать ошибку соответствующим образом.
sqlcmd не сообщает об ошибках уровня серьезности 10 (информационные сообщения).
Если скрипт sqlcmd содержит неправильный комментарий, синтаксическую ошибку или отсутствует переменную скрипта, ERRORLEVEL возвращается1.
-m уровень_ошибки
Управляет отправкой stdoutсообщений об ошибках.
sqlcmd отправляет сообщения с уровнем серьезности, превышающим или равным этому уровню. При установке этого значения -1sqlcmd отправляет все сообщения, включая информационные сообщения. Не включайте пробелы между -m и -1. Например, допустимо и -m-1-m -1 не является.
Этот параметр также задает . Эта переменная имеет значение по умолчанию 0.
-V уровень_серьезности_ошибки
Управляет уровнем серьезности, который sqlcmd использует для задания переменной ERRORLEVEL . Сообщения об ошибках, имеющие уровни серьезности, превышающие или равные этому набору ERRORLEVELзначений. Значения, которые меньше 0, сообщаются как 0. Пакетные и CMD-файлы можно использовать для проверки значения переменной ERRORLEVEL .
Прочие параметры
-a packet_size
Запрашивает пакет другого размера. Этот параметр задает .
packet_size должно быть значением между 512 и 32767. Значение по умолчанию — 4096. Больший размер пакета может повысить производительность выполнения скриптов с множеством операторов Transact-SQL между GO командами. Можно запросить больший размер пакета. Но в случае отклонения запроса программа sqlcmd использует размер пакета по умолчанию для сервера.
-c batch_terminator
Задает признак конца пакета. По умолчанию необходимо завершить команды и отправить их в SQL Server с помощью слова GO на отдельной строке, а затем нажать Enter. При сбросе конца пакета не используйте зарезервированные ключевые слова или символы Transact-SQL, которые имеют особое значение для операционной системы, даже если они предшествуют обратной косой черте.
-L[c]
Применяется только к Windows. Linux и macOS не поддерживаются.
Выводит список локально настроенных серверов и имена серверов, осуществляющих передачу данных в сети. Этот параметр нельзя использовать в сочетании с другими параметрами. Максимальное количество серверов, которые можно перечислить, составляет 3000. Если список серверов усечен из-за размера буфера, отображается предупреждение.
Note
Из-за характера вещания в сетях sqlcmd может не получать своевременный ответ со всех серверов. Таким образом, список возвращенных серверов может отличаться для каждого вызова этого параметра.
Если указать необязательный параметр c, выходные данные отображаются без Servers: строки заголовка, а каждая строка сервера отображается без ведущих пробелов. Это представление называется "чистым выводом". Чистый выход улучшает производительность обработки языков скриптов.
-p[1]
Выводит на печать статистику производительности для каждого результирующего набора. Далее представлен пример формата для статистики производительности:
Network packet size (bytes): n
x xact[s]:
Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)
Where:
-
x= количество транзакций, обработанных SQL Server. -
t1= Общее время обработки всех транзакций. -
t2= среднее время обработки одной транзакции. -
t3= среднее количество транзакций, обрабатываемых в секунду.
Все значения времени приведены в миллисекундах.
Если указать необязательный параметр 1, выходной формат статистики находится в разделенном двоеточием формате, который можно легко импортировать в электронную таблицу или обрабатывать скриптом.
Если указать необязательный параметр любым значением, отличным от 1, создается ошибка и sqlcmd завершает работу.
-X[1]
Отключает команды, которые могут поставить под угрозу безопасность системы при выполнении программы sqlcmd из пакетного файла. Отключенные команды по-прежнему распознаются. Программа sqlcmd выдает предупреждение и продолжает работу. Если указать необязательный параметр 1, sqlcmd создает сообщение об ошибке, а затем завершает работу. При использовании параметра -X происходит отключение следующих команд:
ED-
!!команда
Если указать параметр -X, переменные среды не передаются в sqlcmd. Он также предотвращает выполнение скрипта запуска, указанного с помощью SQLCMDINI переменной сценариев. Дополнительные сведения о переменных скриптов sqlcmd см. в статье sqlcmd. Использование с переменными скриптов.
-?
Отображает версию программы sqlcmd и сводку по синтаксису параметров для sqlcmd .
Note
В macOS выполните ( sqlcmd '-?' с кавычками) вместо этого.
Remarks
Вам не нужно использовать параметры в порядке, приведенном в разделе синтаксиса.
Note
Если вы используете -i параметр, за которым следует один или несколько дополнительных параметров, необходимо использовать пробел между параметром и значением. Это требование является известной проблемой в sqlcmd (Go).
sqlcmd выводит пустую строку между несколькими результирующих наборами в пакете. Кроме того, <x> rows affected сообщение не отображается, если оно не применяется к запущенной инструкции.
Чтобы использовать sqlcmd интерактивно, введите sqlcmd в командной строке любой или несколько параметров, описанных ранее в этой статье. Дополнительные сведения см. в разделе "Использование sqlcmd".
Note
Параметры -l, -Q, -Z, или -i приводят sqlcmd к выходу после выполнения.
Базовая операционная система определяет общую длину командной строки sqlcmd в командной среде (например, cmd.exe или bash), включая все аргументы и развернутые переменные.
Поддержка DSN в sqlcmd и bcp
При указании можно указать имя источника данных (DSN) вместо имени сервера в bcp -S или sqlcmd :Connect параметре (или -D команде). Если вы используете -D данный параметр, sqlcmd и bcp подключаются к серверу, указанному в DSN, с помощью параметра -S.
Системные доменные сети хранятся в odbc.ini файле в каталоге ODBC SysConfigDir (/etc/odbc.ini на стандартных установках). Доменные имена пользователей хранятся в .odbc.ini домашнем каталоге пользователя (~/.odbc.ini).
В системах Windows доменные имена систем и пользователей хранятся в реестре и управляются с помощью odbcad32.exe.
bcp и sqlcmd не поддерживают доменные имена файлов.
Список записей, поддерживаемых драйвером, см. в разделе DSN и ключевые слова строки подключения и атрибуты.
В DSN требуется только запись DRIVER. Для подключения к удаленному серверу sqlcmd или bcp требуется значение в элементе SERVER .
SERVER Если элемент пуст или отсутствует в dsN, sqlcmd или bcp пытается подключиться к экземпляру по умолчанию в локальной системе.
При использовании bcp в системах Windows для SQL Server 2017 (14.x) и более ранних версий требуется драйвер SQL Native Client 11 (sqlncli11.dll), тогда как для SQL Server 2019 (15.x) и более поздних версий требуется драйвер Microsoft ODBC Driver 17 для 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"
Рекомендации по sqlcmd
Используйте следующие методики, чтобы повысить безопасность и эффективность.
Используйте встроенную безопасность.
В автоматических средах указывайте параметр
-X[1].Защита входных и выходных файлов с помощью соответствующих разрешений файловой системы.
Чтобы повысить производительность, сделайте максимально возможное в одном сеансе sqlcmd вместо использования ряда сеансов.
Задайте значения времени ожидания для выполнения пакета или запроса выше ожидаемого времени выполнения пакета или запроса.
Чтобы добиться максимальной правильности, придерживайтесь следующих правил.
Используется
-V 16для регистрации сообщений уровня серьезности 16. Сообщения серьезности 16 указывают на общие ошибки, которые можно исправить.Проверьте код выхода и
DOS ERRORLEVELпеременную после завершения процесса. sqlcmd обычно возвращается0. В противном случае он задаетERRORLEVELзначение, настроенное в соответствии с параметром-V. Другими словами, не ожидайтеERRORLEVELтого же значения, что и номер ошибки, сообщаемого из SQL Server. Номер ошибки — это конкретное значение SQL Server, соответствующее системной функции @@ERROR.ERRORLEVEL— это значение, зависящее от sqlcmd, указывающее, почему sqlcmd завершен. Его значение зависит от указания-bпараметра.
Использование -V 16 в сочетании с проверкой кода выхода и DOS ERRORLEVEL может помочь перехватывать ошибки в автоматизированных средах, особенно качественные шлюзы перед выпуском рабочей среды.
Связанный контент
- Проверка установленной версии программы sqlcmd
- Скачивание и установка программы sqlcmd
- Команды в служебной программе sqlcmd
- Использование sqlcmd с переменными скриптов
- Краткое руководство. Запуск образов контейнеров SQL Server Linux с помощью Docker
- Запустите служебную программу sqlcmd
- Выполнение T-SQL из файла скрипта с помощью sqlcmd
- Использование sqlcmd
- Подключение к SQL Server с помощью sqlcmd
- Изменение скриптов SQLCMD с помощью редактора запросов
- Создайте шаг задания CmdExec