Программа osql

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

Важное примечаниеВажно!

Эта функция будет исключена из будущей версии SQL Server. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, которые ее применяют. Вместо этого используйте программу sqlcmd. Дополнительные сведения см. в разделе Программа sqlcmd.

Синтаксис

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).

    Примечание по безопасностиПримечание по безопасности

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

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

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

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

    C:\>SET OSQLPASSWORD=abracadabraC:\>osql 
    
    Примечание по безопасностиПримечание по безопасности

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

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

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

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

  • -ddb_name
    Выдает инструкцию USE db_name при запуске программы osql.

  • -ltime_out
    Указывает время ожидания входа для программы osql (в секундах). По умолчанию время ожидания входа для программы osql составляет восемь секунд.

  • -ttime_out
    Указывает время ожидания для выполнения команды (в секундах). Если значение time_out не указано, команды имеют неограниченное время ожидания.

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

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

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

  • -apacket_size
    Позволяет запросить пакет нестандартного размера. Допустимые значения параметра packet_size находятся в диапазоне от 512 до 65535. Значение по умолчанию для программы osql равно значению по умолчанию на сервере. Увеличенный размер пакета может увеличить производительность при выполнении большого сценария, со значительным количеством инструкций SQL между командами GO. Тестирования, проведенные Майкрософт, показали, что при установке значения 8192 массовое копирование обычно происходит с максимальной скоростью. Существует возможность запросить больший размер пакета, однако программа osql использует значение сервера по умолчанию, если пакет запрошенного размера невозможно предоставить.

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

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

  • -Ddata_source_name
    Выполняет подключение к источнику данных ODBC, который определен с помощью драйвера ODBC для SQL Server. Соединение программы osql использует параметры, указанные в источнике данных.

    ПримечаниеПримечание

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

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

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

    SET table=sys.objectsosql -E -q "select name, object_id from %table%"
    

    Используйте двойные кавычки для запроса и одинарные кавычки для выражений, содержащихся в запросе.

  • -Q"query"
    Выполняет запрос и немедленно завершает программу osql. Используйте двойные кавычки для запроса и одинарные кавычки для выражений, содержащихся в запросе.

  • -n
    Удаляет нумерацию и символ приглашения (>) из строк ввода.

  • -merror_level
    Настраивает отображение сообщений об ошибках. Номер сообщения, состояние и уровень ошибки отображаются для ошибок указанного или более высокого уровня серьезности. Сообщения для ошибок, у которых уровень серьезности меньше заданного, не отображаются. Используйте значение -1, чтобы указать, что все заголовки должны возвращаться с сообщениями, даже с информационными. При использовании значения -1 между параметром и значением не должно быть пробела (-m-1, а не-m -1).

  • -r { 0| 1}
    Перенаправляет вывод сообщений на экран (stderr). Если параметр не указан, или если указано значение 0, происходит перенаправление только сообщений об ошибках с уровнем серьезности 11 и выше. Если указать значение 1, то происходит перенаправление всех выводимых сообщений (включая сообщения для вывода на печать).

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

  • -ooutput_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. Пакетный файл Microsoft MS-DOS может проверить значение DOS ERRORLEVEL и соответствующим образом обработать ошибку.

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

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

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

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

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

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

    Этот параметр также устанавливает значения ERRORLEVEL DOS по умолчанию, равное -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 пытается подключиться с помощью проверки подлинности Microsoft Windows. Проверка подлинности основана на учетной записи пользователя Microsoft Windows, запускающего программу osql.

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

ПримечаниеПримечание

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

Команды OSQL

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

Команда

Описание

GO

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

RESET

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

QUIT или EXIT( )

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

CTRL+C

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

ПримечаниеПримечание

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

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

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

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

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

SELECT x = 1GO 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
Примечание по безопасностиПримечание по безопасности

По возможности используйте параметр -E (доверительное соединение).

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

ПримечаниеПримечание

Если при использовании программы osql в файле SQL-сценария указан разделитель пакетов GO, SQL Server считает его синтаксической ошибкой.

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

Можно включать комментарии в инструкцию 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**()**
ПримечаниеПримечание

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

  • EXIT**(query)**
ПримечаниеПримечание

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

  • RAISERROR с состоянием 127
ПримечаниеПримечание

Если 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 — это означает, что значение хранится без сокращения количества десятичных разрядов.