Программа osql

Применимо к:SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics AnalyticsPlatform System (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 может не получить своевременный ответ от всех серверов. Поэтому возвращаемый список серверов может меняться при каждом вызове этого параметра.

-Ulogin_id
Идентификатор входа пользователя. Идентификаторы входа зависят от регистра.

-Ppassword
Пароль, задаваемый пользователем. Если параметр -P не указан, программа osql запрашивает пароль. Если параметр -P указывается в конце командной строки без указания пароля, то программа osql использует пароль по умолчанию (NULL).

Важно!

Не используйте пустые пароли. Выбирайте надежные пароли. Дополнительные сведения см. в разделе Strong Passwords.

В паролях учитывается регистр символов.

Переменная среды OSQLPASSWORD позволяет установить значение пароля по умолчанию для текущего сеанса. Поэтому нет необходимости вписывать пароль в пакетные файлы.

Если пароль не указан с помощью параметра -P , программа osql сначала проверяет переменную OSQLPASSWORD. Если значение переменной не задано, программа osql использует пароль по умолчанию (NULL). В следующем примере задается значение переменной OSQLPASSWORD в командной строке, а затем запускается программа osql :

C:\>SET OSQLPASSWORD=abracadabra  
C:\>osql   

Важно!

Чтобы скрыть пароль, не указывайте параметр -P вместе с параметром -U . Вместо этого после ввода команды osql с параметром -U и другими параметрами (не задавайте -P) нажмите клавишу ВВОД, и программа osql предложит ввести пароль. Этот метод обеспечивает скрытие пароля при вводе.

-E
Использует доверительное соединение вместо запроса пароля.

мя_сервера[ \имя_экземпляра]
Указывает экземпляр SQL Server, к которому выполняется подключение. Укажите server_name для подключения к экземпляру SQL Server по умолчанию на этом сервере. Укажите имя_сервера\имя_экземпляра, чтобы подключиться к именованному экземпляру SQL Server на этом сервере. Если сервер не указан, osql подключается к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр необходим при выполнении программы osql с удаленного компьютера в сети.

-Hимя_рабочей_станции
Имя рабочей станции. Имя рабочей станции хранится в sysprocesses.hostname и выводится процедурой sp_who. Если этот параметр не указан, используется текущее имя компьютера.

-dимя_базы_данных
Выдает инструкцию USE db_name при запуске программы osql.

-lвремя_ожидания
Указывает количество секунд до истечения времени ожидания входа в osql . Время ожидания входа в osql по умолчанию — восемь секунд.

-tвремя_ожидания
Указывает количество секунд до истечения времени ожидания команды. Если значение time_out не указано, команды не истекает.

-hзаголовки
Указывает количество строк для печати между заголовками столбцов. По умолчанию заголовки печатаются один раз для каждого набора результатов запроса. Чтобы не печатать заголовки, укажите значение -1. При использовании значения -1 между параметром и значением не должно быть пробела (-h-1, а не -h -1).

-sразделитель_столбцов
Указывает символ-разделитель столбцов, по умолчанию — пробел. Чтобы использовать символы, имеющие особое значение для операционной системы (например, | ; & <>), заключите символ в двойные кавычки ().

-wширина_столбцов
Позволяет пользователю устанавливать ширину экрана для выводимых данных. Значение по умолчанию составляет 80 символов. Когда строка вывода достигает максимальной ширины экрана, она разбивается на несколько строк.

-apacket_size
Позволяет запросить пакет нестандартного размера. Допустимые значения для размер_пакета лежат в диапазоне от 512 до 65 535. Значение по умолчанию osql — это параметр сервера по умолчанию. Увеличенный размер пакета может увеличить производительность при выполнении большого скрипта со значительным количеством инструкций SQL между командами GO. Тестирование Майкрософт указывает, что 8192 обычно является самым быстрым параметром для операций массового копирования. Можно запросить больший размер пакета, но программа osql использует значение сервера по умолчанию, если выполнить запрос невозможно.

-e
Отображает вводимые данные на экране.

-I
Включает параметр соединения QUOTED_IDENTIFIER.

-Dимя_источника_данных
Подключение в источник данных ODBC, определенный с помощью драйвера ODBC для SQL Server. Подключение osql использует параметры, указанные в источнике данных.

Примечание.

Этот параметр не работает с источниками данных, определенными для других драйверов.

-cконец_команды
Указывает признак конца команды. По умолчанию команды завершаются и отправляются в SQL Server, введя GO в строку самостоятельно. При сбросе признака конца команды не используйте зарезервированные слова или символы TransactSQL, которые имеют специальное значение для операционной системы независимо от того, указана ли перед ними обратная косая черта.

-q "запрос"
Выполняет запрос при запуске программы osql , но не закрывает программу osql по завершении запроса. (Обратите внимание, что инструкция запроса не должна содержать GO.) При выполнении запроса из пакетного файла используйте синтаксис %переменные или %переменные среды%. Например:

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, то происходит перенаправление всех выводимых сообщений (включая сообщения для вывода на печать).

-iinput_file
Указывает файл, содержащий пакет инструкций или хранимых процедур SQL. Оператор сравнения "меньше" (<) можно использовать вместо параметра -i.

-ooutput_file
Указывает файл, в который поступают выходные данные программы osql. Оператор сравнения "больше" (>) можно использовать вместо параметра -o.

Если входной_файл имеет формат, отличный от Юникода, а параметр -u не указан, то файл выходной_файл сохраняется в формате OEM. Если файл входной_файл имеет формат Юникода или параметр -u указан, то файл выходной_файл сохраняется в формате Юникод.

-p
Выводит статистику производительности.

-b
Указывает, что в случае ошибки программа osql завершает работу и возвращает значение DOS ERRORLEVEL. Значение, возвращаемое переменной DOS ERRORLEVEL, равно 1, если сообщение об ошибке SQL Server имеет серьезность 11 или больше; в противном случае возвращаемое значение равно 0. Пакетные файлы Microsoft MS-DOS могут проверить значение DOS ERRORLEVEL и соответствующим образом обрабатывать ошибку.

-u
Указывает, что выходной_файл хранится в Юникоде независимо от формата файла входной_файл.

-R
Указывает, что драйвер ODBC SQL Server использует параметры клиента при преобразовании данных валюты, даты и времени в символьные данные.

-O
Указывает, что определенные возможности программы osql будут отключены для совместимости с более ранними версиями программы isql. Будут отключены следующие функции.

  • Пакетная обработка окончания файла

  • Автоматическое масштабирование ширины консоли

  • Длинные сообщения

Этот параметр также устанавливает значения ERRORLEVEL DOS по умолчанию, равное -1.

Примечание.

Программа osqlбольше не поддерживает параметры -n , -O и -D.

Замечания

Программа osql запускается непосредственно из операционной системы с перечисленными ниже параметрами, в которых учитывается регистр символов. После запуска osqlон принимает инструкции SQL и отправляет их в SQL Server в интерактивном режиме. Результаты форматируются и выводятся на экране (stdout). Для выхода из программы osqlиспользуются команды QUIT или EXIT.

Если при запуске osql имя пользователя не указано, SQL Server проверка для переменных среды и использует их, например osqluser=(user) или osqlserver=(server). Если переменные среды не установлены, используется имя пользователя рабочей станции. Если не указан сервер, используется имя рабочей станции.

Если параметры -U или -P не используются, SQL Server пытается подключиться с помощью режима проверки подлинности Microsoft Windows. Проверка подлинности основана на учетной записи Microsoft Windows пользователя, выполняющего osql.

Программа osql использует API ODBC. Программа использует параметры драйвера ODBC SQL Server по умолчанию для параметров подключения ISO SQL Server. Дополнительные сведения см. в разделе «Влияние параметров ANSI».

Примечание.

Программа osql не поддерживает определяемые пользователем типы данных среды CLR. Для обработки этих типов данных следует использовать программу sqlcmd . Дополнительные сведения см. в статье sqlcmd Utility.

Команды OSQL

Помимо инструкций TransactSQL в служебной программе osql также доступны следующие команды.

Команда Description
GO Выполняет все инструкции, введенные после последней команды GO.
СБРОСИТЬ Очищает все введенные инструкции.
QUIT или EXIT( ) Завершение работы программы osql.
CTRL+C Завершает запрос без выхода из программы osql.

Примечание.

Команды !! и ED больше не поддерживаются программой osql.

Признаки конца команды GO (по умолчанию), RESET, EXIT, QUIT и CTRL+C распознаются только в начале строки, сразу после запроса программы osql .

GO обозначает конец пакета и выполнение любых кэшированных инструкций Transact-SQL. При нажатии клавиши ВВОД в конце каждой строки ввода программа osql выполняет кэширование инструкций из этой строки. При нажатии клавиши ВВОД после ввода ВВОДА все кэшированные инструкции в данный момент отправляются в SQL Server как пакет.

Последняя версия программы osql работает таким образом, как будто в конце любого выполняемого скрипта имеется подразумеваемая инструкция GO, поэтому выполняются все инструкции скрипта.

Закончите команду с помощью ввода строки, которая начинается с признака конца команды. Следом за признаком конца команды можно ввести целое число, чтобы указать, сколько раз выполнить команду. Например, чтобы выполнить эту команду 100 раз, введите:

SELECT x = 1  
GO 100  

Результаты выводятся на печать один раз после завершения. Программаosql не принимает более 1000 символов в одной строке. Большие инструкции должны вводиться в несколько строк.

Для повторного вызова и изменения инструкций osql могут использоваться средства повторного вызова команд Windows. Существующий буфер запросов можно очистить с помощью команды 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имя_файла. Это приведет к отправке скрипта SQL в файле с именем имя_файла непосредственно на сервер в виде единого пакета.

Примечание.

При использовании osql SQL Server обрабатывает пакетный разделитель GO, если он отображается в файле скрипта SQL, как синтаксическую ошибку.

Вставка примечаний

Комментарии можно включить в инструкцию Transact-SQL, отправленную в SQL Server osql. Допускаются два типа стиля комментариев: -- и /*...*/.

Использование инструкции EXIT для возвращения результатов программы 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**(query)**

Примечание.

Выполняет пакет, включая запрос, затем возвращает результаты запроса и завершает работу.

  • RAISERROR с состоянием 127

Примечание.

Если в скрипте osql используется RAISERROR и при этом возникает состояние 127, программа osql завершает выполнение и возвращает клиенту идентификатор сообщения. Например:

RAISERROR(50001, 10, 127)  

Эта ошибка приведет к завершению скрипта osql , при этом клиенту будет возвращен идентификатор сообщения 50001.

Возвращаемые значения -1 –99 зарезервированы SQL Server; 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— это означает, что значение хранится без сокращения количества десятичных разрядов.

См. также

Комментарий (многомерное выражение)
-- (Комментарий) (многомерное выражение)
CAST и CONVERT (Transact-SQL)
RAISERROR (Transact-SQL)