用批处理(.bat)文件执行SQL语句

osql  / U alma  / / i stores.bat 

(stores.bat中包含update ,delete语句,不过,不需要使用GO) 

-- -------------------------------------------------- 

osql 实用工具 
osql 实用工具使您得以输入 Transact
- SQL 语句、系统过程和脚本文件。该实用工具通过 ODBC 与服务器通讯。 

语法 
osql 
    
[ -? ]   ¦ 
    
[ -L ]   ¦ 
    
[  
        { 
            {-U login_id [-P password
]
             ¦ 
-
        } 
        
[ -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 ]  
    ] 

参数
-

显示 osql 开关的语法摘要。 

-

列出在本地配置的服务器和在网络上广播的服务器的名称。 

- U login_id 

用户登录 ID。登录 ID 区分大小写。 

- P password 

是用户指定的密码。如果未使用 
- P 选项,osql 将提示输入密码。如果在命令提示符的末尾使用  - P 选项而不带密码,osql 使用默认密码 ( NULL )。密码区分大小写。 

OSQLPASSWORD 环境变量使您得以为当前会话设置默认密码。因此,不需要通过硬编码来在批处理文件中设置密码。 

如果没有为 
- P 选项指定密码,osql 首先检查 OSQLPASSWORD 变量。如果未设置值,osql 使用默认密码 ( NULL )。以下示例在命令提示符处设置 OSQLPASSWORD 变量,然后访问 osql 实用工具: 

C:
> SET  OSQLPASSWORD = abracadabra 
C:
> osql  

-

使用信任连接而不请求密码。 

- S server_name [ instance_name ]  

指定要连接的 Microsoft® SQL Server™ 
2000  实例。在该服务器上指定 server_name 以连接到 SQL Server 的默认实例。在该服务器上指定 server_nameinstance_name 以连接到一个已命名的 SQL Server  2000  的实例。如果未指定服务器,osql 将连接到本地计算机上的 SQL Server 默认实例。从网络上的远程计算机执行 osql 时,此选项是必需的。 

- H wksta_name 

是工作站名称。工作站名称存储在 sysprocesses.hostname 中并由 sp_who 显示。如果未指定此选项,则采用当前计算机名称。 

- db_name  

启动 osql 时发出一个 
USE   db_name  语句。 

- l time_out 

指定 osql 登录超时之前的秒数。登录到 osql 的默认超时为 
8  秒。 

- 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 的默认值为服务器的默认值。数据包大小的增加可以提高较大脚本执行的性能,在这种执行中  GO  命令之间 SQL 语句的数量很重要。Microsoft 的测试表明  8192  是大容量复制操作典型的最快设置。可以请求更大的数据包大小,但如果请求不能得到批准,则 osql 默认为服务器的默认值。 

-

回显输入。 

-

设置 QUOTED_IDENTIFIER 连接选项为开启。 

- D data_source_name 

连接到用 Microsoft SQL Server 的 ODBC 驱动程序定义的 ODBC 数据源。osql 连接使用该数据源中指定的选项。 


说明  该选项不适用于其它驱动程序定义的数据源。 


- c cmd_end 

指定命令终止符。默认情况下,通过单独在一行中输入 
GO  来终止命令并将其发送到 SQL Server  2000 。在重置命令终止符时,不要使用对操作系统有特殊含义的 Transact - SQL 保留字或字符,无论其前面是否有反斜杠。 

- q "query" 

启动 osql 时执行查询,但是在查询完成时不退出 osql。(注意查询语句不应包含 
GO )。如果从批处理文件中发出查询,请使用  % variables 或环境  % variables % 。例如: 

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

将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。 

- Q "query" 

执行查询并立即退出 osql。将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。 

-

从输入行中删除编号和提示符号 (
> )。 

- m error_level 

自定义错误信息的显示。显示指定的或更高严重级别错误的消息数、状态和错误级别。不显示严重级别低于指定级别的错误的任何信息。用 
- 1  指定与消息一起返回所有标题,即使是信息类的消息。如果用 – 1 ,则在参数和设置之间不能有空格(可以是  - m - 1 ,不能是  - - 1 )。 

- r { 0   ¦  1

将消息输出重定向到屏幕 (stderr)。如果未指定参数,或指定参数为 
0 ,则仅重定向严重级别为  17  或更高的错误信息。如果指定参数为  1 ,则将重定向所有消息输出(包括 " print ")。 

- i input_file 

标识包含一批 SQL 语句或存储过程的文件。小于 ( 
< ) 比较运算符可以用来代替 –i。 

- o output_file 

标识从 osql 接收输出的文件。大于 (
> ) 比较运算符可以用来代替 –o。 

如果 input_file 不是 
Unicode  并且没有指定  - u,则 output_file 将存储为 OEM 格式。如果 input_file 是  Unicode  或者指定了  - u,则 output_file 将存储为  Unicode  格式。 

-

打印性能统计。 

-

指定发生错误时 osql 退出并返回一个 DOS ERRORLEVEL 值。当 SQL Server 错误信息的严重级别为 
10  或更高时,返回给 DOS ERRORLEVEL 变量的值为  1 ;否则返回  0 。Microsoft MS - DOS® 批处理文件可以测试 DOS ERRORLEVEL 的值并适当处理错误。 

-

指定 output_file 存储为 
Unicode  格式,而不管 input_file 为何种格式。 

-

指定在将货币、日期和时间数据转换为字符数据时 SQL Server ODBC 驱动程序使用客户端设置。 

-

为与 isql 的早期版本行为匹配,指定停用某些 osql 功能。下列功能停用:  

EOF 批处理 


控制台宽度自动调整 


宽信息  
同时还将 DOS ERRORLEVEL 的默认值设置为 –
1 。 

注释 
osql 实用工具从操作系统直接启动,并且使用本文中列出的区分大小写的选项。启动后,osql 接受 SQL 语句并将它们交互地发送到 SQL Server。结果被格式化并显示在屏幕上 (stdout)。可使用 QUIT 或 
EXIT  退出 osql。 

如果启动 osql 时未指定用户名,SQL Server 
2000  将检查环境变量并使用它们,例如 osqluser = ( user ) 或 osqlserver = (server)。如果未设置环境变量,则使用工作站用户名。如果未指定服务器,则使用工作站名称。 

如果 
- U 或  - P 选项都没有使用,则 SQL Server  2000  将尝试使用 Windows 身份验证模式进行连接。身份验证基于运行 osql 的 Microsoft Windows NT® 用户帐户。 

osql 实用工具使用 ODBC API。该实用工具使用 SQL Server 
2000  SQL - 92  连接选项的 SQL Server ODBC 驱动程序默认设置。有关更多信息,请参见 SQL - 92  选项的效果。 

有关此实用工具位置和运行方式的信息,请参见命令提示实用工具入门。 

OSQL 命令 
除了 osql 中使用的 Transact
- SQL 语句外,下表中的命令也可用。 

命令 描述  
GO  执行最后一个  GO  命令之后输入的所有语句。  
RESET 清除已输入的所有语句。  
ED 调用编辑器。  
!! command 执行操作系统命令。  
QUIT 或 
EXIT ( ) 退出 osql。  
CTRL
+ C 键 不退出 osql 而结束查询。  


仅当命令终止符 
GO (默认)、RESET、ED、!!、 EXIT 、QUIT 和 CTRL + C 出现在一行的开始(紧跟 osql 提示符)时才可以识别。osql 忽视同一行中这些关键字后输入的任何内容。 

GO  表明一批的结束和任何已被高速缓存的 Transact - SQL 语句的执行。在每个输入行的结尾按 ENTER 键时,osql 将高速缓存此行的语句。键入  GO  后按 ENTER 键时,所有当前已缓存的语句都将作为批处理发送到 SQL Server。 

当前的 osql 实用工具工作起来就好像在任何被执行的脚本结尾处都带有隐含的 
GO ,因而脚本中的所有语句都将执行。最后一个  GO  后的任何语句都不执行。 

通过键入以命令终止符作为开始的行来结束命令。可以在命令终止符后输入一个整数来指定命令运行的次数。例如,若要执行此命令 100次,请键入: 

SELECT  x  =   1  
GO   100  

执行结束时打印一次结果。osql 不接受每行字符数超过 
1 , 000  的结果。长语句应当跨多个行书写。 

通过在行首键入 ED,用户可以在当前查询缓冲区上调用编辑器。编辑器在 EDITOR 环境变量中定义。默认编辑器为"edit"。可以通过设置 EDITOR 环境变量来指定其它编辑器。例如,若要将默认编辑器指定为 Notepad,请在操作系统提示符处输入: 

SET  EDITOR = notepad 

操作系统命令 
通过用两个惊叹号 (!!) 开始一行,然后输入命令的方式,也可以执行操作系统命令。Windows NT 的命令撤回功能可用来撤回和修改 osql 语句。键入 RESET 可以清除现有的查询缓冲区。 

在运行存储过程时,osql 在批处理中的每个结果集之间打印一个空行。此外,如果没有应用于已执行的语句,则"
0  行受到影响"消息不会出现。 

交互性使用 osql 
若要交互性使用 osql,请在命令提示符处键入 osql 命令(以及任何选项)。 

可以通过键入类似下行的命令,在包含由 osql 执行的查询的文件(例如 Stores.qry)中进行读取: 

osql 
/ U alma  / / i stores.qry 

该文件必须包含命令终止符。  

可以通过键入类似下行的命令,在包含查询的文件(例如 Titles.qry)中进行读取并将结果导向另一文件: 

osql 
/ U alma  / / i titles.qry  / o titles.res 

交互性使用 osql 时,为把操作系统文件读入到命令缓冲区,可使用:r 
file_name 。不要在文件中包含命令终止符;在完成编辑后交互输入终止符。 

插入注释 
在 osql 提交给 SQL Server 的 Transact
- SQL 语句中可以包含注释。允许使用两种注释风格类型: --  和 /*...*/。 

有关更多信息,请参见使用注释。 

使用 
EXIT  返回 osql 结果 
可以使用 
SELECT  语句的结果作为 osql 的返回值。第一个结果行的第一列转换为  4  字节的整数(长整型)。MS - DOS 将低字节传递给父进程或操作系统错误级别。Windows NT 则传递整个  4  字节整数。语法为: 

EXIT (query) 

例如: 

EXIT ( SELECT   @@ROWCOUNT

EXIT ( SELECT   5

也可以包含 
EXIT  参数,使其作为批处理文件的一部分。例如: 

osql 
/ Q " EXIT ( SELECT   COUNT ( * FROM   ' %1 ' )" 

osql 实用工具将圆括号 ( ) 中输入的所有内容原样传递给服务器。如果存储系统过程选择了一个集合并返回一个值,则仅返回选择的内容。在圆括号之间无参数的 
EXIT ( ) 语句执行批处理中此语句前的所有内容,然后退出,而不返回值。  

EXIT  格式有四种:  

EXIT   
不执行批处理就立即退出,无返回值。  

EXIT ( )  
执行批处理后退出,无返回值。  

EXIT (query)  
执行包括查询的批处理,返回查询的结果后退出。  

状态为 
127  的  RAISERROR 。  
如果在 osql 脚本中使用 
RAISERROR ,并且出现状态  127 ,则 osql 会退出并将消息 ID 返回给客户程序。例如:  

RAISERROR ( 50001 10 127

该错误会导致 osql 脚本终止并将消息 ID 
50001  返回给客户程序。 

SQL Server 保留介于 
- 1  到  - 99  之间的返回值;osql 定义下列值:  

- 100   
选择返回值前遇到的错误。 

- 101   
选择返回值时找不到行。 

- 102   
选择返回值时发生转换错误。 

显示 
money  和  smallmoney  数据类型 
osql 只用两位小数位数显示 
money  和  smallmoney  数据类型,但 SQL Server 用四位小数位数在内部存储这两类数据的值。请看下例:  

SELECT   CAST ( CAST ( 10.3496   AS   money AS   decimal ( 6 4 )) 

此语句的结果为 
10.3496 ,说明该值是原样按完整的小数位存储的。 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值