Программа osql

Программа osql позволяет вводить инструкции Transact-SQL, системные процедуры и файлы сценариев. Для связи с сервером эта программа использует ODBC.

ms162806.note(ru-ru,SQL.90).gifВажно!
Эта возможность будет исключена в будущей версии Microsoft SQL Server. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, которые ее применяют. Вместо этого используйте программу sqlcmd. Дополнительные сведения см. в разделе sqlcmd Utility.

Синтаксис

osql
[-?] |
[-L] |
[
  {
     {-Uидентификатор_входа [-Pпароль]} | –E }
     [-Sсервер[\экземпляр]] [-Hимя_узла] [-dимя_используемой_БД]
     [-lвремя_ожидания_входа] [-tвремя_ожидания_запроса] [-hзаголовки]
     [-sразделитель_столбцов] [-wширина_столбца] [-aразмер_пакета]
     [-e] [-I] [-D имя_источника_данных_ODBC]
     [-cзавершение_команды] [-q "запрос_командной_строки"] [-Q"запрос_командной_строки"]
     [-n] [-mуровень_сообщений_об_ошибках] [-r {0 | 1}]
     [-iфайл_ввода] [-oфайл_вывода] [-p]
     [-b] [-u] [-R] [-O]
]

Аргументы

  • -?
    Отображает сводку по синтаксису ключей программы osql.
  • -L
    Выводит список локально настроенных серверов и имена серверов, осуществляющих широковещание данных в сети.

    ms162806.note(ru-ru,SQL.90).gifПримечание.
    Из-за особенностей широковещания в сети программа sqlcmd может не получить своевременный ответ от всех серверов. Поэтому возвращаемый список серверов может меняться при каждом вызове этого параметра.
  • -Uидентификатор_входа
    Идентификатор входа пользователя. В идентификаторах входа учитывается регистр вводимых символов.
  • -Pпароль
    Пароль, задаваемый пользователем. Если параметр -P не используется, то программа osql запрашивает пароль. Если параметр -P используется в конце командной строки без указания пароля, то программа osql использует пароль по умолчанию (NULL).

    ms162806.security(ru-ru,SQL.90).gifПримечание безопасности.
    Не используйте пустой пароль. Используйте надежный пароль. Дополнительные сведения см. в разделе Надежные пароли.

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

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

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

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>osql 
    
    ms162806.security(ru-ru,SQL.90).gifПримечание безопасности.
    Чтобы скрыть пароль, не указывайте параметр -P вместе с параметром -U. Вместо этого после ввода команды osql с параметром -U и другими ключами (не указывайте -P) нажмите клавишу ВВОД, и программа osql предложит ввести пароль. Этот метод обеспечивает скрытие пароля при вводе.
  • -E
    Использует доверенное соединение вместо запроса пароля.
  • -S сервер[ **\экземпляр]
    Указывает экземпляр Microsoft SQL Server, с которым нужно соединиться. Укажите только сервер, чтобы подключиться к экземпляру SQL Server по умолчанию на этом сервере. Укажите сервер
    \**экземпляр, чтобы соединиться с именованным экземпляром SQL Server на этом сервере. Если сервер не указан, программа osql выполняет подключение к экземпляру SQL Server по умолчанию на локальном компьютере. Этот параметр необходим при выполнении программы osql с удаленного компьютера в сети.
  • -H имя_узла
    Имя рабочей станции. Имя рабочей станции хранится в sysprocesses.hostname и отображается процедурой sp_who. Если этот параметр не указан, используется текущее имя компьютера.
  • -d имя_используемой_БД
    Выдает инструкцию USE имя_используемой_БД при запуске программы osql.
  • -l время_ожидания_входа
    Указывает время ожидания входа для программы osql (в секундах). По умолчанию время ожидания входа для программы osql составляет восемь секунд.
  • -t время_ожидания_запроса
    Указывает время ожидания для выполнения команды (в секундах). Если значение время_ожидания_запроса не указано, команды имеют неограниченное время ожидания.
  • -h заголовки
    Указывает количество строк для печати между заголовками столбцов. По умолчанию заголовки печатаются один раз для каждого набора результатов запроса. Чтобы не печатать заголовки, укажите значение -1. При использовании значения -1 между параметром и значением не должно быть пробела (-h-1, а не -h -1).
  • -s разделитель_столбцов
    Указывает символ-разделитель столбцов, по умолчанию — пробел. Чтобы использовать символы, которые имеют специальное значение для операционной системы (например, «|», «&», «<», «>»), заключите символ в двойные кавычки (").
  • -w ширина_столбца
    Позволяет пользователю устанавливать ширину экрана для выводимых данных. Ширина по умолчанию составляет 80 символов. Когда строка вывода достигает максимальной ширины экрана, она разбивается на несколько строк.
  • -aразмер_пакета
    Позволяет запросить пакет нестандартного размера. Допустимые значения параметра размер_пакета лежат в пределах от 512 до 65535. Значение по умолчанию для программы osql равно значению по умолчанию на сервере. Увеличенный размер пакета может увеличить производительность при выполнении большого сценария, со значительным количеством инструкций SQL между командами GO. Тестирования, проведенные Майкрософт, показали, что при установке значения 8192 массовое копирование обычно происходит с максимальной скоростью. Существует возможность запросить больший размер пакета, однако программа osql использует значение сервера по умолчанию, если пакет запрошенного размера невозможно предоставить.
  • -e
    Отображает вводимые данные на экране.
  • -I
    Включает параметр соединения QUOTED_IDENTIFIER.
  • -Dимя_источника_данных_ODBC
    Выполняет подключение к источнику данных ODBC, который определен с помощью драйвера ODBC для Microsoft SQL Server. Соединение программы osql использует параметры, указанные в источнике данных.

    ms162806.note(ru-ru,SQL.90).gifПримечание.
    Этот параметр не работает с источниками данных, определенными для других драйверов.
  • -c завершение_команды
    Указывает признак конца команды. По умолчанию команды заканчиваются и отправляются в SQL Server с помощью ввода GO в отдельной строке. При сбросе признака конца команды не используйте зарезервированные слова Transact-SQL или символы, которые имеют специальное значение для операционной системы вне зависимости от того, указана ли перед ними обратная косая черта.
  • -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, то происходит перенаправление всех выводимых сообщений (включая сообщения для вывода на печать).
  • -i файл_ввода
    Указывает файл, содержащий пакет инструкций или хранимых процедур SQL. Оператор сравнения «меньше» (<) может использоваться вместо параметра -i.
  • -o файл_вывода
    Указывает файл, принимающий выходные данные программы 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.

ms162806.note(ru-ru,SQL.90).gifПримечание.
Параметры -n, -O и -D больше не поддерживаются программой osql.

Замечания

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

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

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

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

ms162806.note(ru-ru,SQL.90).gifПримечание.
Программа osql не поддерживает пользовательские типы данных среды CLR. Чтобы обработать эти типы данных, следует использовать программу sqlcmd. Дополнительные сведения см. в разделе Программа sqlcmd.

Команды OSQL

В дополнение к инструкциям Transact-SQL в программе osql также доступны следующие команды.

Команда Описание

GO

Выполняет все инструкции, введенные после последней команды GO.

RESET

Очищает все введенные инструкции.

QUIT или EXIT( )

Выходит из программы osql.

CTRL+C

Завершает запрос без выхода из программы osql.

ms162806.note(ru-ru,SQL.90).gifПримечание.
Команды !! и ED больше не поддерживаются программой osql.

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

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

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

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

SELECT x = 1
GO 100

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

Для повторного вызова и изменения инструкций osql могут использоваться средства повторного вызова команд Windows. Существующий буфер запросов можно очистить с помощью команды RESET.

При запуске хранимых процедур программа osql выводит пустую строку между результирующими наборами в пакете. Кроме того, сообщение «обработано строк: 0» не выводится, если оно не применимо к выполненной инструкции.

Применение программы osql в интерактивном режиме

Чтобы использовать программу osql в интерактивном режиме, введите osql (и любые параметры) в командной строке.

Запрос для выполнения программой osql можно считать из файла (например, Stores.qry) с помощью ввода команды, подобной следующей:

osql -E -i stores.qry

Можно считать запрос из файла (например, Titles.qry) и направить результаты в другой файл, введя команду, подобную следующей:

osql -E -i titles.qry -o titles.res
ms162806.security(ru-ru,SQL.90).gifПримечание безопасности.
При возможности используйте параметр -E (доверенное соединение).

При использовании программы osql в интерактивном режиме можно считать файл операционной системы в буфер команд с помощью команды :rимя_файла. Это приведет к отправке SQL-сценария в файле с именем имя_файла непосредственно на сервер в виде единого пакета.

ms162806.note(ru-ru,SQL.90).gifПримечание.
При использовании программы 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
ms162806.note(ru-ru,SQL.90).gifПримечание.
Не выполняет пакет, немедленно завершает работу и не возвращает значение.
  • EXIT**(** )
ms162806.note(ru-ru,SQL.90).gifПримечание.
Выполняет пакет, затем завершает выполнение и не возвращает значения.
  • EXIT**(запрос)**
ms162806.note(ru-ru,SQL.90).gifПримечание.
Выполняет пакет, включая запрос, затем возвращает результаты запроса и завершает работу.
  • RAISERROR с состоянием 127
ms162806.note(ru-ru,SQL.90).gifПримечание.
Если RAISERROR используется в сценарии osql и возникает состояние 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)
Обеспечение безопасности служб Notification Services
RAISERROR (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005