Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо:SQL Server
База данных SQL Azure
Управляемый экземпляр SQL Azure
Azure Synapse Analytics
Аналитическая Платформа (PDW)
Служебная программа osql позволяет вводить инструкции Transact-SQL, системные процедуры и файлы сценариев. Для связи с сервером эта программа использует ODBC.
Внимание
Эта функция будет удалена в будущей версии SQL Server. Не используйте эту функцию в новых разработках и планируйте изменение приложений, которые используют ее в данный момент. Вместо этого используйте sqlcmd . Дополнительные сведения см. в статье sqlcmd Utility.
Синтаксис
osql
[ -? ] |
[ -L ] |
[
{
{ -Ulogin_id [ -Ppassword ] } | -E }
[ -Sserver_name [ \instance_name ] ] [ -Hwksta_name ] [ -ddb_name ]
[ -ltime_out ] [ -ttime_out ] [ -hheaders ]
[ -scol_separator ] [ -wcolumn_width ] [ -apacket_size ]
[ -e ] [ -I ] [ -D data_source_name ]
[ -ccmd_end ] [ -q "query" ] [ -Q"query" ]
[ -n ] [ -merror_level ] [ -r { 0 | 1 } ]
[ -iinput_file ] [ -ooutput_file ] [ -p ]
[ -b ] [ -u ] [ -R ] [ -O ]
]
Аргументы
-?
Отображает сводку синтаксиса параметров osql.
-L
Выводит список локально настроенных серверов и имена серверов, осуществляющих трансляцию данных в сети.
Примечание.
osql может не получать своевременный ответ со всех серверов в сети Windows. Список возвращенных серверов может отличаться для каждого вызова этого параметра.
-U login_id
Идентификатор входа пользователя. Идентификаторы входа чувствительны к регистру.
- P-пароль
Указанный пользователем пароль.
-P Если параметр не используется, osql запрашивает пароль.
-P Если параметр используется в конце командной строки без пароля, osql использует пароль по умолчанию (NULL).
Внимание
Не используйте пустой пароль. Выбирайте надежные пароли. Дополнительные сведения см. в разделе "Надежные пароли".
В паролях учитывается регистр символов.
Переменная OSQLPASSWORD среды позволяет задать пароль по умолчанию для текущего сеанса. Поэтому вам не нужно жестко кодировать пароль в пакетные файлы.
Если вы не указываете пароль с параметром -P , osql сначала проверяет наличие переменной OSQLPASSWORD . Если значение не задано, osql использует пароль NULLпо умолчанию. Следующий пример задает OSQLPASSWORD переменную в командной строке и получает доступ к служебной программе osql :
SET OSQLPASSWORD=abracadabra
osql
Внимание
Чтобы маскировать пароль, не указывайте параметр -P вместе с параметром -U. Вместо этого после указания osql вместе с параметром -U и другими переключателями (не указывайте -P), нажмите клавишу ВВОД и osql запрашивает пароль. Этот метод гарантирует, что пароль маскируется при вводе.
-E
Использует доверительное соединение вместо запроса пароля.
-S server_name[\instance_name]
Указывает экземпляр SQL Server, к которому выполняется подключение. Укажите server_name для подключения к экземпляру SQL Server по умолчанию на этом сервере. Укажите <server_name>\<instance_name>, чтобы подключиться к именованному экземпляру SQL Server на этом сервере. Если сервер не указан, osql подключается к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр необходим при выполнении программы osql с удаленного компьютера в сети.
-H wksta_name
Имя рабочей станции. Имя рабочей станции хранится sysprocesses.hostname и отображается sp_who. Если этот параметр не указан, предполагается текущее имя компьютера.
-d db_name
Выдает инструкцию USE db_name при запуске osql .
-l time_out
Указывает количество секунд до истечения времени ожидания входа в osql . Время ожидания по умолчанию для подключения к osql составляет восемь секунд.
-t тайм-аут
Указывает количество секунд до истечения времени ожидания выполнения команды. Если значение таймаута не указано, команды не истекают.
-h заголовки
Указывает количество строк для печати между заголовками столбцов. По умолчанию заголовки печатаются один раз для каждого набора результатов запроса. Используется -1 для указания того, что заголовки не должны быть напечатаны. Если используется -1, между параметром и настройкой не должно быть пробела (-h-1, не -h -1).
-s col_separator
Указывает символ-разделитель столбцов, по умолчанию — пробел. Чтобы использовать символы, имеющие особое значение для операционной системы (например, | ; & <>), заключите символ в двойные кавычки ().
-w column_width
Позволяет пользователю устанавливать ширину экрана для выводимых данных. Значение по умолчанию составляет 80 символов. Когда выходная строка достигает максимальной ширины экрана, она разбивается на несколько строк.
-a packet_size
Позволяет запросить пакет нестандартного размера. Допустимые значения для размер_пакета лежат в диапазоне от 512 до 65 535. Значение по умолчанию osql — это параметр сервера по умолчанию. Увеличение размера пакета может повысить производительность при более крупном выполнении скрипта, где количество операторов Transact-SQL между GO командами существенно. Тестирование Майкрософт указывает, что 8192 обычно является самым быстрым параметром для операций массового копирования. Можно запросить больший размер пакета, но если запрос не может быть предоставлен, osql будет использовать серверное значение по умолчанию.
-e
Повторяет ввод.
-I
Включает параметр подключения QUOTED_IDENTIFIER.
-D data_source_name
Подключается к источнику данных ODBC, определенному с помощью драйвера ODBC для SQL Server. Подключение osql использует параметры, указанные в источнике данных.
Примечание.
Этот параметр не работает с источниками данных, определенными для других драйверов.
-c cmd_end
Указывает признак конца команды. По умолчанию команды завершаются и отправляются в SQL Server, введением GO на отдельной строке. При сбросе терминатора команды не используйте зарезервированные слова Transact-SQL или символы, которые имеют особое значение для операционной системы, независимо от того, предшествует ли им обратная косая черта или нет.
-q "query"
Выполняет запрос при запуске osql , но не завершает работу osql после завершения запроса. (Запрос не должен содержать GO). Если вы выдаете запрос из пакетного файла, используйте %<variable>или среду %<variable>%. Например:
SET table=sys.objects
osql -E -q "select name, object_id from %table%"
Используйте двойные кавычки для запроса и одинарные кавычки для выражений, встроенных в запрос.
Запрос -Q "
Выполняет запрос и сразу же закрывает программу osql. Используйте двойные кавычки для запроса и одинарные кавычки для выражений, встроенных в запрос.
-n
Удаляет нумерацию и символ подсказки (>) из строк ввода.
-m уровень_ошибки
Настраивает отображение сообщений об ошибках. Номер сообщения, состояние и уровень ошибки отображаются для ошибок указанного или более высокого уровня серьезности. Ошибки уровней ниже указанного не отображаются. Используйте -1 для указания, чтобы все заголовки возвращались с сообщениями, включая информационные. При использовании -1, не должно быть пробела между параметром и настройкой (-m-1, не -m -1).
-r { 0| 1}
Перенаправляет выходные данные сообщения на экран (stderr). Если параметр не указан, или указано 0, перенаправляются только сообщения об ошибках с уровнем серьезности 11 или выше. При указании 1все выходные данные сообщения (включая печать) перенаправляются.
-i input_file
Указывает файл, содержащий пакет инструкций или хранимых процедур SQL. Оператор сравнения «меньше чем» (<) можно использовать вместо -i.
-o output_file
Указывает файл, в который поступают выходные данные программы osql. Вместо -o может быть использован оператор сравнения 'больше чем' (>).
Если input_file не указан Юникод и -u не указан, output_file хранится в формате OEM. Если input_file является Юникодом или -u указан, output_file хранится в формате Юникода.
-p
Выводит статистику производительности.
-b
Указывает, что osql завершает работу и возвращает значение DOS ERRORLEVEL при возникновении ошибки. Значение, возвращаемое переменной DOS ERRORLEVEL , равно 1, если сообщение об ошибке SQL Server имеет серьезность 11 или больше; в противном случае возвращаемое значение равно 0. MS-DOS пакетные файлы могут проверить значение DOS ERRORLEVEL и соответствующим образом обрабатывать ошибку.
-u
Указывает, что выходной_файл хранится в Юникоде независимо от формата файла входной_файл.
-R
Указывает, что драйвер ODBC SQL Server должен использовать параметры клиента при преобразовании данных валюты, даты и времени в символьные данные.
-O
Указывает, что определенные возможности программы osql будут отключены для совместимости с более ранними версиями программы isql. Будут отключены следующие функции.
- Пакетная обработка окончания файла
- Автоматическое масштабирование ширины консоли
- Длинные сообщения
Он также задает значение ERRORLEVELDOS -1 по умолчанию.
Примечание.
-n, -O и -D не поддерживаются osql.
Замечания
Утилита osql запускается непосредственно из операционной системы с перечисленными здесь параметрами, которые чувствительны к регистру символов. После запуска osql он принимает инструкции SQL и отправляет их в SQL Server в интерактивном режиме. Результаты форматируются и отображаются на экране (stdout). Используйте QUIT или EXIT, чтобы выйти из osql.
Если при запуске osql не указано имя пользователя, SQL Server проверяет наличие переменных среды и использует их, например osqluser=(<user>) или osqlserver=(<server>). Если переменные среды не установлены, используется имя пользователя рабочей станции. Если сервер не указан, используется имя рабочей станции.
Если ни какие-либо -U-P параметры не используются, SQL Server пытается подключиться с помощью режима проверки подлинности Windows. Проверка подлинности основана на учетной записи Windows пользователя, выполняющего osql.
Программа osql использует API ODBC. Программа использует параметры драйвера ODBC SQL Server по умолчанию для параметров подключения ISO SQL Server. Дополнительные сведения см. в разделе "Рекомендации" при использовании инструкций SET.
Примечание.
Служебная программа osql не поддерживает определяемые пользователем типы данных CLR. Для обработки этих типов данных следует использовать программу sqlcmd . Дополнительные сведения см. в статье sqlcmd Utility.
Команды OSQL
Помимо инструкций TransactSQL в служебной программе osql также доступны следующие команды.
| Команда | Описание |
|---|---|
GO |
Выполняет все инструкции, введенные после последнего GO. |
RESET |
Очищает все введенные заявления. |
QUIT или EXIT() |
Выход из osql. |
| CTRL+C | Завершает запрос без выхода из программы osql. |
Примечание.
Команды !! и ED не поддерживаются osql.
Терминаторы GO команд (по умолчанию), RESET, EXITQUITи CTRL+C распознаются только в том случае, если они отображаются в начале строки сразу после командной строки osql.
GO сигнализирует о завершении пакета и выполнении всех кэшированных инструкций Transact-SQL. При нажатии клавиши ВВОД в конце каждой входной строки osql кэширует инструкции в этой строке. При нажатии клавиши ВВОД после ввода GOвсе кэшированные инструкции в данный момент отправляются в sql Server как пакет.
Текущая служебная программа osql работает так, как если бы в конце любого выполняемого скрипта существовали подразумеваемые GO инструкции, поэтому все инструкции в скрипте выполняются.
Завершите команду с помощью ввода строки, начинающейся со знака завершения команды. Следом за признаком конца команды можно ввести целое число, чтобы указать, сколько раз выполнить команду. Например, чтобы выполнить эту команду 100 раз, введите:
SELECT x = 1
GO 100
Результаты печатаются один раз по завершении программы. osql не принимает более 1000 символов на строку. Большие выражения должны быть распределены на несколько строк.
Вы можете использовать средства отзыва команд в Windows, чтобы отозвать и изменить инструкции osql . Существующий буфер запроса можно очистить, введя RESETтекст.
При выполнении хранимых процедур osql выводит пустую строку между каждым набором результатов в пакете. Кроме того, сообщение "0 затронутых строк" не отображается, когда он не применяется к выполненной инструкции.
Интерактивное использование osql
Чтобы использовать программу osql в интерактивном режиме, введите команду osql (и любые параметры) в командной строке.
Файл, содержащий запрос (например, Stores.qry), можно загрузить в программу osql и выполнить, введя команду следующего вида:
osql -E -i stores.qry
Можно считать запрос из файла (например, Titles.qry) и направить результаты в другой файл, введя команду, подобную следующей:
osql -E -i titles.qry -o titles.res
Внимание
По возможности используйте параметр -E (доверенное подключение).
При интерактивном использовании osql можно с помощью :r<file_name> считывать файл операционной системы в буфер команд. Это приведет к отправке скрипта SQL в файле с именем имя_файла непосредственно на сервер в виде единого пакета.
Примечание.
osql рассматривает разделитель пакета GO как синтаксическую ошибку, если он встречается в файле скрипта SQL.
Вставка комментариев
Комментарии можно включить в инструкцию Transact-SQL, отправленную в SQL Server osql. Допускаются два типа стиля комментариев: -- и /*...*/.
Использование выхода для возврата результатов в osql
Результат инструкции SELECT можно использовать в качестве возвращаемого значения из osql. Если это числовой, последний столбец последней строки результата преобразуется в 4-байтовое целое число (long). В MS-DOS младший байт передается родительскому процессу или уровню ошибки операционной системы. Windows передает все 4-байтовое целое число. Синтаксис:
EXIT ( <query> )
Например:
EXIT(SELECT @@ROWCOUNT)
Вы также можете включить EXIT параметр в пакетный файл. Например:
osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"
Служебная программа osql передает все между скобками () серверу точно так же, как введены. Если хранимая системная процедура выбирает набор и возвращает значение, то возвращается только выбранный набор. Оператор EXIT() без скобок выполняет все предыдущие действия в пакете, а затем завершает работу без возвращаемого значения.
Существует четыре EXIT формата:
| Формат | Сведения |
|---|---|
EXIT |
Не выполняет пакет команд, немедленно завершает и не возвращает никакого значения. |
EXIT() |
Выполняет пакет, завершает выполнение и не возвращает значения. |
EXIT(<query>) |
Выполняет пакет, включая запрос, затем возвращает результаты запроса и завершает работу. |
RAISERROR с состоянием 127 |
Если RAISERROR используется в скрипте osql и возникает состояние 127, osql завершает работу и возвращает идентификатор сообщения клиенту. |
В следующем примере показано, как повлиять на поведение osql с помощью RAISERROR:
RAISERROR (50001, 10, 127);
Эта ошибка приводит к завершению скрипта osql и возвращает клиенту идентификатор сообщения 50001.
Возвращаемые значения -1-99 зарезервированы.
osql определяет следующие значения:
-
-100: ошибка, обнаруженная перед выбором возвращаемого значения. -
-101: не найдено строк при выборе возвращаемого значения. -
-102: при выборе возвращаемого значения произошла ошибка преобразования.
Отображение типов данных money и smallmoney
osql отображает типы данных money и smallmoney с двумя десятичными знаками, хотя SQL Server сохраняет значение внутри с четырьмя десятичными разрядами. Рассмотрим пример .
SELECT CAST (CAST (10.3496 AS MONEY) AS DECIMAL (6, 4));
GO
Эта инструкция вернет 10.3496— это означает, что значение хранится без сокращения количества десятичных разрядов.