用批处理文件履行SQL脚本ITeye - 众发娱乐

用批处理文件履行SQL脚本ITeye

2019年04月04日15时16分53秒 | 作者: 德昌 | 标签: 履行,文件,批处理 | 浏览: 2629

需求:履行bat批处理文件能够主动履行某些现已写好的sql 脚本。

进程:(1) 创立一个批处理文件:翻开记事本,创立数据库衔接信息(例如,server name,username,password,databasename等)以及要履行的*.sql脚本称号。详细语法参阅下 文"osql 实用工具" 。 将文件的扩展名改为.bat 并保存。

 示例1: 指定待履行sql 文件的相对路径

osql -S admin\admin -U sa -P sa -d TestDB -i c:\test.sql 
pause

   示例2:  待履行文件与bat文件在同一个目录,指定相对路径

set localdir=%~dp0
         osql -S (local) -U sa -P sa -d Test -i %localdir%\test1.sql 
osql -S (local) -U sa -P sa -d Test -i %localdir%\test2.sql  
     osql -S (local) -U sa -P sa -d Test -i %localdir%\test3.sql
         pause

  (2) 创立需求履行的sql 脚本, test.sql,test2.sql 和test3.sql, 并放在进程(1)示例1中指定的方位。本例为c:\ 根目录。假如用示例2,将待履行的sql和bat文件放在同一个目录下。

  (3) 双击*.bat 文件并查看运转成果。

 

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

语法 

osql
[-?] |
[-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]]
]

参数-? 

显现 osql 开关的语法摘要。 

-L 

列出在本地装备的服务器和在网络上播送的服务器的称号。 

-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  

-E 

运用信赖衔接而不恳求暗码。 

-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 显现。假如未指定此选项,则选用当时核算机称号。 

-d 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 默许为服务器的默许值。 

-e 

回显输入。 

-I 

设置 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。将查询用双引号引起来,将查询中嵌入的任何内容用单引号引起来。 

-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 

标识从 osql 接纳输出的文件。大于 ( ) 比较运算符能够用来替代 –o。 

假如 input_file 不是 Unicode 而且没有指定 -u,则 output_file 将存储为 OEM 格局。假如 input_file 是 Unicode 或许指定了 -u,则 output_file 将存储为 Unicode 格局。 

-p 

打印功用计算。 

-b 

指定发作过错时 osql 退出并回来一个 DOS ERRORLEVEL 值。当 SQL Server 过错信息的严峻等级为 10 或更高时,回来给 DOS ERRORLEVEL 变量的值为 1;不然回来 0。Microsoft MS-DOS® 批处理文件能够测验 DOS ERRORLEVEL 的值并恰当处理过错。 

-u 

指定 output_file 存储为 Unicode 格局,而不论 input_file 为何种格局。 

-R 

指定在将钱银、日期和时刻数据转化为字符数据时 SQL Server ODBC 驱动程序运用客户端设置。 

-O 

为与 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 /P /i stores.qry 

该文件有必要包含指令停止符。  

能够经过键入相似下行的指令,在包含查询的文件(例如 Titles.qry)中进行读取并将成果导向另一文件: 

osql /U alma /P /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,阐明该值是原样按完好的小数位存储的。

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    用批处理文件履行SQL脚本ITeye

    履行,文件,批处理
  • 2
  • 3
  • 4

    oracle搜集ITeye

    假如,查询,成果
  • 5

    db2move 指令无法导出表ITeye

    导出,数据,字符
  • 6
  • 7

    Memcached的定位ITeye

    定位,数据,一个
  • 8

    PGA内存办理战略ITeye

    内存,办理,时刻
  • 9

    MySQL命令行ITeye

    输入,数据库,指令
  • 10

    Oracle 表空间与数据文件ITeye

    空间,数据文件,文件