isql 实用工具使您得以输入 Transact-SQL 语句、系统过程和脚本文件;并且使用 DB-Library 与 Microsoft® SQL Server™ 2000 进行通讯。
语法
isql
[-?] |
[-L] |
[
{
{-Ulogin_id [-Ppassword]}
| -E }
[-Sserver_name] [-Hwksta_name] [-ddb_name]
[-ltime_out] [-ttime_out] [-hheaders]
[-scol_separator] [-wcolumn_width] [-apacket_size]
[-e] [-xmax_text_size]
[-ccmd_end] [-q "query"] [-Q"query"]
[-n] [-merror_level] [-r {0 | 1}]
[-iinput_file] [-ooutput_file] [-p]
[-b] [-O]
]
参数
-?
显示 isql 开关的语法摘要。
-L
列出在本地配置的服务器和在网络上广播的服务器的名称。
-Ulogin_id
用户登录 ID。登录 ID 区分大小写。
-Ppassword
是用户指定的密码。如果未使用 -P 选项,isql 将提示输入密码。如果在命令提示的末尾使用 -P 选项而不带密码,isql 使用默认密码 (NULL)。密码区分大小写。
ISQLPASSWORD 环境变量使您得以为当前会话设置默认密码。因此,不需要通过硬编码来在批处理文件中设置密码。
如果没有为 -P 选项指定密码,isql 首先检查 ISQLPASSWORD 变量。如果未设置值,isql 使用默认密码 (NULL)。以下示例在命令提示处设置 ISQLPASSWORD 变量,然后访问 isql 实用工具:
C:/>SET ISQLPASSWORD=abracadabra
C:/>isql
-E
使用信任连接而不请求密码。
-S server_name
指定要连接到的 SQL Server 默认实例。isql 不支持连接到 SQL Server 2000 命名实例。如果未指定服务器,isql 将连接到本地计算机上的 SQL Server 默认实例。如果要在网络上从远程计算机执行 isql,则需要此选项。
-H wksta_name
是工作站名称。工作站名称存储在 sysprocesses.hostname 中并由 sp_who 显示。如果未指定,则采用当前计算机名称。
-d db_name
启动 isql 时发出一个 USE db_name 语句。
-ltime_out
指定 isql 登录超时之前的秒数。如果未指定 time_out 值,则命令无限期地运行。登录到 isql 的默认超时为 8 秒。
-t time_out
指定命令超时之前的秒数。如果未指定 time_out 值,则命令会无限期地运行;登录到 isql 的默认超时为 8 秒。
-h headers
指定要在列标题之间打印的行数。默认为每一查询结果集打印一次标题。使用 –1 指定不打印标题。如果使用 –1,则在参数和设置之间不能有空格(可以是 -h-1,不能是 -h –1)。
-s col_separator
指定列分隔符字符,其默认为空格。若要使用对操作系统有特殊含义的字符(例如 | ; & < >),请将该字符用双引号 (") 引起来。
-w column_width
允许用户设置屏幕输出的宽度。默认为 80 个字符。当输出行达到其最大屏幕宽度时,会拆分为多个行。
-apacket_size
使您得以请求不同大小的数据包。packet_size 的有效值介于 512 和 65535 之间。Microsoft Windows NT® 版中的 isql 默认值为 8192;另外,Microsoft MS-DOS® 版中的 isql 默认值为 512,但在该版本中也可以请求更大的数据包。数据包大小的增加可以提高较大脚本执行的性能,在这种执行中 GO 命令之间 SQL 语句的数量很重要。Microsoft 的测试表明 8192 是大容量复制操作典型的最快设置。可以请求更大的数据包大小,但是如果请求不能得到批准,则 isql 默认为 512。
-e
回显输入。
-xmax_text_size
指定返回文本数据的最大长度,以字节为单位。长于 max_text_size 的文本值将被截断。如果未指定 max_text_size,则文本数据在 4096 字节处截断。
-c cmd_end
指定命令终止符。默认情况下,通过单独在一行中输入 GO 来终止命令并将其发送到 SQL Server 2000。在重置命令终止符时,不要使用对操作系统有特殊含义的 Transact-SQL 保留字或字符,无论其前面是否有反斜杠。
-q "query"
启动 isql 时执行查询,但是在查询完成时不退出 isql。(注意查询语句不应包含 GO)。如果从批处理文件中发出查询,可使用 %variables。环境 %variables% 也可用。例如:
SET table = sysobjects
isql /q "Select * from %table%"
将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。
-Q"query"
执行查询,在查询完成时立即退出 isql。将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。
-n
从输入行中删除编号和提示符号 (>)。
-m error_level
自定义错误信息的显示。显示指定的或更高严重级别错误的消息数、状态和错误级别。不显示严重级别低于指定级别的错误的任何信息。用 -1 指定与消息一起返回所有标题,即使是信息类的消息。如果使用 –1,则在参数和设置之间不能有空格(可以是 -m-1,不能是 -m-1)。
-r {0 | 1}
将消息输出重定向到屏幕 (stderr)。如果未指定参数,或指定参数为 0,那么仅重定向严重级别为 17 或更高的错误信息。如果指定参数为 1,则将重定向所有消息输出(包括 "print")。
-i input_file
标识包含一批 SQL 语句或存储过程的文件。小于 (<) 比较运算符可以用来代替 –i。
-o output_file
标识从 isql 接收输出的文件。大于 (>) 比较运算符可以用来代替 –o。
-p
打印性能统计。
-b
指定错误发生时 isql 退出并返回一个 DOS ERRORLEVEL 值。当 SQL Server 错误信息的严重级别为 10 或更高时,返回给 DOS ERRORLEVEL 变量的值为 1;否则,返回值为 0。MS-DOS 批处理文件可以测试 DOS ERRORLEVEL 的值并适当处理错误。
-O
指定 isql 还原为早期版本的行为。下列功能停用:
- EOF 批处理
- 控制台宽度自动调整
- 宽信息 该选项还将 DOS ERRORLEVEL 的默认值设置为 –1。
注释
所有 DB-Library 应用程序(如 isql)连接到 SQL Server 2000 后,作为 SQL Server 6.5 级客户端工作。它们不支持 SQL Server 2000 的某些功能。而 osql 实用工具是基于 ODBC 并支持 SQL Server 2000 的全部功能。使用 osql 运行 isql 无法运行的脚本。有关 SQL Server 6.5 级客户端限制的更多信息,请参见 SQL Server 联机丛书中的将早期版本客户端连接到 SQL Server 2000。
默认情况下,SQL 查询分析器将 SQL 脚本保存为 Unicode 文件。isql 实用工具不支持 Unicode 输入文件。尝试在 -i 开关中指定这些文件中的某一个时会导致错误 170:
Incorrect syntax near ' '.
使用 osql 实用工具运行这些 Unicode 文件。另一种方法是在 SQL 查询分析器的"文件/另存为"对话框的"文件格式"列表中指定 ANSI 而非 Unicode。
与大多数 DB-Library 应用程序类似,isql 实用工具在默认情况下不设置任何连接选项。用户如果希望使用特定连接选项设置,必须交互地或在脚本中发出 SET 语句。
isql 实用工具从操作系统直接启动,并且使用本文中列出的区分大小写的选项。启动后,isql 接受 Transact-SQL 语句并将它们交互地发送到 SQL Server 2000。结果将格式化并打印到标准输出设备(屏幕)。可使用 QUIT 或 EXIT 退出 isql。
如果启动 isql 时未指定用户名,则 SQL Server 2000 将检查环境变量并使用它们,如 isqluser=(user) 或 isqlserver=(server)。如果未设置环境变量,则使用工作站用户名。如果未指定服务器,则使用工作站名称。
如果 -U 或 -P 选项都没有使用,则 SQL Server 2000 将尝试使用 Windows 身份验证模式进行连接。身份验证基于运行 isql 的用户的 Windows NT 帐户。
除了 isql 中使用的 Transact-SQL 语句外,下表中的命令也可用。
命令 | 描述 |
GO | 执行最后一个 GO 命令之后输入的所有语句。 |
RESET | 清除已输入的所有语句。 |
ED | 调用编辑器。 |
!!command | 执行操作系统命令。 |
QUIT 或 EXIT( ) | 退出 isql。 |
CTRL+C | 不退出 isql 而结束查询。 |
仅当命令终止符 GO(默认)、RESET、ED、!!、EXIT、QUIT 和 CTRL+C 出现在一行的开始(紧跟 isql 提示符)时才可以被识别。isql 忽视同一行中这些关键字后输入的任何内容。
GO 表明一批的结束和任何已被高速缓存的 Transact-SQL 语句的执行。在每个输入行的结尾按 ENTER 键,isql 将缓存此行的语句。键入 GO 后按 ENTER 键时,所有当前已被高速缓存的语句将作为一批发送到 SQL Server 2000。
当前的 isql 实用工具工作起来就好像在任何被执行的脚本结尾处都带有隐含的 GO,因而脚本中的所有语句都将执行。除非输出脚本中至少有一个 GO,否则一些早期版本的 isql 将不发送任何语句到服务器。最后一个 GO 后的任何语句都不执行。
通过键入以命令终止符作为开始的行来结束命令。可以在命令终止符后输入一个整数来指定命令运行的次数。例如,若要执行此命令 100 次,请键入:
SELECT x = 1
GO 100
结果在执行结束时打印一次。使用 isql 时,每行字符数目限制为 1000 个。长语句应当跨多个行书写。
通 过在行首键入 ED,用户可以在当前查询缓冲区上调用编辑器。编辑器在 EDITOR 环境变量中定义。默认编辑器是 MS-DOS 和 Windows NT 的"edit"。可以通过设置 EDITOR 环境变量来指定其它编辑器。例如,若要将默认编辑器指定为 Notepad,请在操作系统提示符处输入:
SET EDITOR=notepad
有关在何处可以找到或运行该实用工具的更多信息,请参见命令提示实用工具入门。
操作系统命令
通过用两个惊叹号 (!!) 开始一行,然后输入命令的方式,也可以执行操作系统命令。DOSKEY 命令撤回工具可以用来撤回和修改以前在运行 Windows NT 的计算机上输入的 isql 语句。键入 RESET 可以清除现有的查询缓冲区。
在运行存储过程时,isql 在批处理中的每个结果集之间打印一个空行。此外,如果没有应用于已执行的语句,则"0 行受到影响"消息不会出现。
交互性使用 isql
若要交互性使用 isql,请在命令提示符处键入 isql 命令(以及任何选项)。
可以通过键入类似下行的命令,在包含由 isql 执行的查询的文件(例如 Stores.qry)中进行读取:
isql /U alma /P /i stores.qry
该文件必须包含命令终止符。
可以通过键入类似下行的命令,在包含查询的文件(例如 Titles.qry)中进行读取并将结果导向另一文件:
isql /U alma /P /i titles.qry /o titles.res
交互性使用 isql 时,为把操作系统文件读入到命令缓冲区,可使用:r file_name。不要在文件中包含命令终止符;在完成编辑后交互输入终止符。
插入注释
在 isql 提交给 SQL Server 2000 的 Transact-SQL 语句中可以包含注释。允许使用两种注释风格类型:-- 和 /*...*/。
有关更多信息,请参见使用注释。
使用 EXIT 返回 isql 结果
可以使用 SELECT 语句的结果作为 isql 的返回值。第一个结果行的第一列转换为 4 字节的整数(长整型)。MS-DOS 将低字节传递给父进程或操作系统错误级别。Windows NT 则传递整个 4 字节整数。语法为:
EXIT(query)
例如:
EXIT(SELECT @@rowcount)
EXIT(SELECT 5)
也可以包含 EXIT 参数,使其作为批处理文件的一部分。例如:
isql /Q "EXIT(SELECT COUNT(*) FROM '%1')"
isql 实用工具将圆括号 ( ) 中输入的所有内容原样传递给服务器。EXIT( ) 语句可以跨行。如果存储系统过程选择了一个集合并返回一个值,则仅返回选择的内容。在圆括号之间无参数的 EXIT() 语句执行批处理中此语句前的所有内容,然后退出,而不返回值。
EXIT 格式有四种:
- EXIT 不执行批处理就立即退出,无返回值。
- EXIT() 执行批处理后退出,无返回值。
- EXIT(query) 执行包括查询的批处理,返回查询的结果后退出。
- 状态为 127 的 RAISERROR。 如果在 isql 脚本中使用 RAISERROR,并且出现状态 127,则 isql 会退出并将消息 ID 返回给客户程序。例如:
RAISERROR(50001, 10, 127)
该错误会导致 isql 脚本终止并将消息 ID 50001 返回给客户程序。
SQL Server 保留从 -1 到 -99 的返回值;isql 定义下列值:
- -100 选择返回值前遇到的错误。
- -101 选择返回值时找不到行。
- -102 选择返回值时的转换错误。