osql 实用工具从操作系统直接启动,并且使用本文中列出的区分大小写的选项。启动后,osql 将接受 SQL 语句,然后以交互方式将语句发送到 SQL Server。结果被格式化并在屏幕 (stdout) 上显示。可使用 QUIT 或 EXIT 退出 osql。
如果启动 osql 时不指定用户名,则 SQL Server 将检查并使用环境变量,如 osqluser=(user) 或 osqlserver=(server)。如果未设置环 境变量,则使用工作站用户名。如果未指定服务器,则使用工作站名称。
如果 -U 和 -P 选项都没有使用,则 SQL Server 将尝试使用 Microsoft Windows 身份验证模式进行连接。身份验证根据运行 osql 的用户的 Microsoft Windows 帐户进行。
osql 实用工具使用 ODBC API。对于 SQL Server ISO 连接选项,该实用工具使用 SQL Server ODBC 驱动程序的默认设置。有关详细信息,请参阅“ANSI 选项的效果”。
注 意: |
osql 实用工具不支持 CLR 用户定义数据类型。若要处理这些数据类型,必须使用 sqlcmd 实用工具。
|
OSQL 命令
除了 osql 中的 Transact-SQL 语句外,还可以使用以下命令。
命令 |
说明 |
GO
|
执行上一个 GO 命令之后输入的所有语句。
|
RESET
|
清除已输入的所有语句。
|
QUIT 或 EXIT( )
|
退出 osql。
|
Ctrl+C
|
结束查询但不退出 osql。
|
注 意: |
osql 不再支持 !!和 ED 命令。
|
仅当命令终止符 GO(默认)、RESET、EXIT、QUIT 和 Ctrl+C 出现在一行的开始(紧跟 osql 提示符)时,才会被识别。
GO 在批处理和执行任何缓存 Transact-SQL 语句结尾时会发出信号。在每个输入行的结尾按 Enter 键时,osql 将缓存此行的语句。键入 GO 后按 Enter 键时,所有当前已缓存的语句都将作为批处理发送到 SQL Server。
使用当前的 osql 实用工具时,好像在被执行的脚本结尾处都带有隐含的 GO,因而将执行脚本中的所有语句。
键入以命令终止符开始的行可结束命令。可以在命令终止符后输入一个整数来指定命令运行的次数。例如,若要执行此命令 100 次,可键入:
执行结束后将打印结果。osql 的每个行不能超过 1,000 个字符。长语句应当跨多行书写。
Windows 的命令撤回功能可用来撤回和修改 osql 语句。键入 RESET 可以清除现有的查询缓冲区。
运行存储过程时,osql 在批处理中的每个结果集之间打印一个空行。此外,如果没有应用于执行的语句,则不会出现“0 行受到影响”消息。
以交互方式使用 osql
若要以交互方式使用 osql,请在命令提示符中键入 osql 命令(以及任何选项)。
通过键入类似下面的命令,可以读入一个包含由 osql 执行的查询的文件(例如 Stores.qry):
通过键入类似下面的命令,可以读入包含查询的文件(如 Titles.qry),并将结果导向其他文件:
osql -E -i titles.qry -o titles.res
安 全说明: |
如果可能,请使用 -E 选项(可信连接)。
|
以交互方式使用 osql 时,若要将操作系统文件读入命令缓冲区,可使用 :r file_name。这会将 file_name 中的 SQL 脚本作为一个批处理直接发送给服务器。
注 意: |
使用 osql 时,如果批处理分隔符“GO”出现在 SQL 脚本文件中,则 SQL Server 会将其视为语法错误。
|
插入注释
可以在 osql 提交给 SQL Server 的 Transact-SQL 语句中包含注释。允许使用两种类型的注释样式:-- 和 /*...*/。
使用 EXIT 返回 osql 中的结果
可以使用 SELECT 语句的结果作为 osql 的返回值。第一个结果行的第一列转换 为 4 字节的整数(Long)。MS-DOS 将低字节传递给父进程或操作系统错误级别。Windows 则传递整个 4 字节整数。语法为:
例如:
还可以在批处理文件中包含 EXIT 参数。例如:
osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"
osql 实用工具将圆括号 ( ) 中输入的所有内容原样传递给服务器。如果存储系统过程选择了一个集合并返回一个值,则仅返回选择的内容。圆括号中无参数的 EXIT( ) 语句将执行批处理中此语句前的所有内容,然后不返回值退出。
EXIT 格式有四种:
注 意: |
不执行批处理,立即退出,不返回值。
|
注 意: |
执行批处理后退出,不返回值。
|
注 意: |
执行包括查询的批处理,返回查询的结果后退出。
|
注 意: |
如果在 osql 脚本中使用 RAISERROR,并且出现状态 127,则 osql 将退出,并将消息 ID 返回给客户端。例如:
|
RAISERROR(50001, 10, 127)
此错误将导致 osql 脚本终止,并向客户端返回消息 ID 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
,说明该值是原样按完整的小数位存储的。