Программа 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=abracadabra
    C:\>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
    Выдает инструкцию 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.objects
    osql -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.

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

Программа 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 не принимает более 1 000 символов в строке. Большие инструкции должны вводиться в несколько строк.

Для повторного вызова и изменения инструкций 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 в интерактивном режиме файл операционной системы можно считать в буфер команд, введя команду :rfile_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 — это означает, что значение хранится без сокращения количества десятичных разрядов.