osql Utility

osql Utility

SQL Server 2000

  Topic last updated -- January 2004

The osql utility allows you to enter Transact-SQL statements, system procedures, and script files. This utility uses ODBC to communicate with the server.


[-?] |
    [-L] |
            {-U login_id [-P password]}
            | –E
        [-S server_name[\instance_name]] [-H wksta_name] [-d db_name]
        [-l time_out] [-t time_out] [-h headers]
        [-s col_separator] [-w column_width] [-a packet_size]
        [-e] [-I] [-D data_source_name]
        [-c cmd_end] [-q "query"] [-Q "query"]
        [-n] [-m error_level] [-r {0 | 1}]
        [-i input_file] [-o output_file] [-p]
        [-b] [-u] [-R] [-O] [-X[1]]



Displays the syntax summary of osql switches.


Lists the locally configured servers and the names of the servers broadcasting on the network.

-U login_id

Is the user login ID. Login IDs are case-sensitive.

-P password

Is a user-specified password. If the -P option is not used, osql prompts for a password. If the -P option is used at the end of the command prompt without any password, osql uses the default password (NULL).

Security Note  NULL passwords are not recommended.

Passwords are case-sensitive.

The OSQLPASSWORD environment variable allows you to set a default password for the current session. Therefore, you do not have to hard code a password into batch files.

If you do not specify a password with the -P option, osql first checks for the OSQLPASSWORD variable. If no value is set, osql uses the default password, NULL. The following example sets the OSQLPASSWORD variable at a command prompt and then accesses the osql utility:

C:\>SET OSQLPASSWORD=abracadabra

Security Note  To mask your password, do not specify the -P option along with the -U option. Instead, after specifying osql along with the -U option and other switches (do not specify -P), press ENTER, and osql will prompt you for a password. This method ensures that your password will be masked when it is entered.


Uses a trusted connection instead of requesting a password.

-S server_name[\instance_name]

Specifies the instance of Microsoft® SQL Server™ 2000 to connect to. Specify server_name to connect to the default instance of SQL Server on that server. Specify server_name\instance_name to connect to a named instance of SQL Server 2000 on that server. If no server is specified, osql connects to the default instance of SQL Server on the local computer. This option is required when executing osql from a remote computer on the network.

-H wksta_name

Is a workstation name. The workstation name is stored in sysprocesses.hostname and is displayed by sp_who. If this option is not specified, the current computer name is assumed.

-d db_name

Issues a USE db_name statement when osql is started.

-l time_out

Specifies the number of seconds before an osql login times out. The default time-out for login to osql is eight seconds.

-t time_out

Specifies the number of seconds before a command times out. If a time_out value is not specified, commands do not time out.

-h headers

Specifies the number of rows to print between column headings. The default is to print headings one time for each set of query results. Use -1 to specify that no headers will be printed. If –1 is used, there must be no space between the parameter and the setting (-h-1, not -h -1).

-s col_separator

Specifies the column-separator character, which is a blank space by default. To use characters that have special meaning to the operating system (for example, | ; & < >), enclose the character in double quotation marks (").

-w column_width

Allows the user to set the screen width for output. The default is 80 characters. When an output line has reached its maximum screen width, it is broken into multiple lines.

-a packet_size

Allows you to request a different-sized packet. The valid values for packet_size are 512 through 65535. The default value osql is the server default. Increased packet size can enhance performance on larger script execution where the amount of SQL statements between GO commands is substantial. Microsoft testing indicates that 8192 is typically the fastest setting for bulk copy operations. A larger packet size can be requested, but osql defaults to the server default if the request cannot be granted.


Echoes input.


Sets the QUOTED_IDENTIFIER connection option on.

-D data_source_name

Connects to an ODBC data source that is defined using the ODBC driver for Microsoft SQL Server. The osql connection uses the options specified in the data source.

Note  This option does not work with data sources defined for other drivers.

-c cmd_end

Specifies the command terminator. By default, commands are terminated and sent to SQL Server 2000 by entering GO on a line by itself. When you reset the command terminator, do not use Transact-SQL reserved words or characters that have special meaning to the operating system, whether preceded by a backslash or not.

-q "query"

Executes a query when osql starts, but does not exit osql when the query completes. (Note that the query statement should not include GO). If you issue a query from a batch file, use %variables, or environment %variables%. For example:

SET table = sysobjects
osql /q "Select * from %table%"

Use double quotation marks around the query and single quotation marks around anything embedded in the query.

-Q "query"

Executes a query and immediately exits osql. Use double quotation marks around the query and single quotation marks around anything embedded in the query.


Removes numbering and the prompt symbol (>) from input lines.

-m error_level

Customizes the display of error messages. The message number, state, and error level are displayed for errors of the specified severity level or higher. Nothing is displayed for errors of levels lower than the specified level. Use -1 to specify that all headers are returned with messages, even informational messages. If using -1, there must be no space between the parameter and the setting (-m-1, not -m -1).

-r {0 | 1}

Redirects message output to the screen (stderr). If you do not specify a parameter, or if you specify 0, only error messages with a severity level 11 or higher are redirected. If you specify 1, all message output (including "print") is redirected.

-i input_file

Identifies the file that contains a batch of SQL statements or stored procedures. The less than (<) comparison operator can be used in place of -i.

If input_file only specifies a file name, osql attempts to open a file with that name in the current folder. If the file is in another folder, input_file must contain the path to that folder, such as –i C:\MyFolder\MyScript.sql.

-o output_file

Identifies the file that receives output from osql. The greater than (>) comparison operator can be used in place of -o.

If input_file is not Unicode and -u is not specified, output_file is stored in OEM format. If input_file is Unicode or -u is specified, output_file is stored in Unicode format.

If output_file only specifies a file name, osql creates a file with that name in the current folder. To place the file in another folder, specify the path to that folder in output_file, such as –o C:\MyFolder\MyReport.rpt.


Prints performance statistics.


Specifies that osql exits and returns a DOS ERRORLEVEL value when an error occurs. The value returned to the DOS ERRORLEVEL variable is 1 when the SQL Server error message has a severity of 10 or greater; otherwise, the value returned is 0. Microsoft MS-DOS® batch files can test the value of DOS ERRORLEVEL and handle the error appropriately.


Specifies that output_file is stored in Unicode format, regardless of the format of the input_file.


Specifies that the SQL Server ODBC driver use client settings when converting currency, date, and time data to character data.


Specifies that certain osql features be deactivated to match the behavior of earlier versions of isql. These features are deactivated:

  • EOF batch processing

  • Automatic console width scaling

  • Wide messages

    It also sets the default DOS ERRORLEVEL value to -1.


Disables the ED and !! commands (see descriptions of these commands later in this topic) when osql is executed from a batch file. These commands are still recognized but osql does not execute them. Instead, osql issues a warning message and continues execution of the batch. If the optional argument 1 is specified, osql issues an error message and exits.

© 2016 Microsoft