Программа 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 может не получить своевременный ответ от всех серверов. Поэтому возвращаемый список серверов может меняться при каждом вызове этого параметра.

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

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

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

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

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

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

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

    C:\>SET OSQLPASSWORD=abracadabra
    C:\>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 time_out
    Указывает время ожидания для выполнения команды (в секундах). Если значение time_out не указано, команды имеют неограниченное время ожидания.

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

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

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

  • -a packet_size
    Позволяет запросить пакет нестандартного размера. Допустимые значения для packet_size лежат в диапазоне от 512 до 65535. Значение по умолчанию osql — это параметр сервера по умолчанию. Увеличенный размер пакета может увеличить производительность при выполнении большого скрипта со значительным количеством инструкций SQL между командами GO. Тестирование Microsoft показывает, что при установке значения 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.) При выполнении запроса из пакетного файла используйте синтаксис %переменные или %переменные среды%. Например:

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

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

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

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

  • -m error_level
    Настраивает отображение сообщений об ошибках. Номер сообщения, состояние и уровень ошибки отображаются для ошибок указанного или более высокого уровня серьезности. Сообщения для ошибок, у которых уровень серьезности меньше заданного, не отображаются. Используйте значение -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. Microsoft Пакетные файлы MS-DOS могут быть использованы для проверки значения DOS ERRORLEVEL и для обработки ошибки соответствующим образом.

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

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

Команды OSQL

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

Команда

Описание

GO

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

RESET

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

QUIT или EXIT( )

Завершение работы программы osql.

CTRL+C

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

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

Программа osql больше не поддерживает команды !! и ED.

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

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

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

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

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

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

Использование инструкции 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
ПримечаниеПримечание

Если в скрипте 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)