osql 调用 sql文件时如何传递参数

macroiori_rommel 2010-10-08 09:38:54
使用osql命令执行sql文件
C:\Program Files\Microsoft SQL Server\90\Tools\Binn>osql -dcmedb -Usa -Pemsems -i D:\test.sql 参数

test.sql文件中内容如下:
declare @Version varchar(255)
set @Version = '&1'

update t_XXX_Table set SwapWord = '10A' where Version = @Version

如果传递参数给sql文件? 谢谢!
...全文
260 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
王向飞 2010-10-08
  • 打赏
  • 举报
回复
osql [-U 登录 ID] [-P 密码]
[-S 服务器] [-H 主机名] [-E 可信连接]
[-d 使用数据库名称] [-l 登录超时值] [-t 查询超时值]
[-h 标题] [-s 列分隔符] [-w 列宽]
[-a 数据包大小] [-e 回显输入] [-I 允许带引号的标识符]
[-L 列出服务器] [-c 命令结束] [-D ODBC DSN 名称]
[-q "命令行查询"] [-Q "命令行查询" 并退出]
[-n 删除编号方式] [-m 错误级别]
[-r 发送到 stderr 的消息] [-V 严重级别]
[-i 输入文件] [-o 输出文件]
[-p 打印统计信息] [-b 出错时中止批处理]
[-X[1] 禁用命令,[退出的同时显示警告]]
王向飞 2010-10-08
  • 打赏
  • 举报
回复

我们通常是先用程序把这SQL语句拼接到.SQL文件中,再用osql定时调用。
billpu 2010-10-08
  • 打赏
  • 举报
回复
参数就不清楚了可不可以 帮顶
billpu 2010-10-08
  • 打赏
  • 举报
回复
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]  ] 参数-? 显示 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_name\instance_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,说明该值是原样按完整的小数位存储的。

一、选择题:(20分) 1、根据关系数据基于的数据模型——关系模型的特征判定下列正确的一项:(___) A、只存在一对多的实体关系,以图形方式来表示。 B、以二维表格结构来保存数据,在关系表中不答应有重复行存在。 C、能体现一对多、多对多的关系,但不能体现一对一的关系。 D、关系模型数据库是数据库发展的最初阶段。 2、在“连接”组中有两种连接认证方式,其中在(___)方式下,需要客户端应用程序连接提供登录需要的用户标识和密码。 A、Windows身份验证 B、SQL Server 身份验证 C、以超级用户身份登录 D、其他方式登录 3、SQL Server 2000 在安装之前,应留意的事项:(___) A、SQL Server 2000的任何版本在安装都不用考虑操作系统的制约。 B、SQL Server 2000的安装对硬件的要求不作任何限制。 C、SQL Server 2000 在安装之前,必须在操作系统级启用TCP/IP。 D、在Windows NT Server 4.0上安装SQL Server 2000,最低的要求是必须安装Service Pack 4(SP4)以上。 4、关系数据库中,主键是(1___),主键的建立有(2___)种方法,当运用Transact-SQL语句创建主键,可以是(3___)。 ⑴ A、为标识表中唯一的实体 B、创建唯一的索引,答应空值 C、只答应以表中第一字段建立 D、答应有多个主键的 ⑵ A、一 B、二 C、三 D、四 ⑶ A、create table table1 (column1 char(13) not null primary, column2 int not) on primary; B、alter table table1 with notcheck add constraint [PK_table1] primary key nonclustered ( column1) on primary; C、alter table table1 column1 primary key ; 5、表在数据库中是一个非常重要的数据对象,它是用来(1___)各种数据内容的,数据库创建后就可以创建表了,创建表可以用(2___)等方法来创建。 ⑴ A、显示 B、查询 C、存放 D、检索 ⑵ A、企业治理器 B、查询分析器 C、OSQL D、企业治理器和CREATE TABLE语句 6、为数据表创建索引的目的是(1___),可以在创建表用(2___)来创建唯一索引,也可以用(2___)来创建唯一索引。 ⑴ A、提高查询的检索性能 B、创建唯一索引 C、创建主键 D、归类 ⑵ A、设置主键约束,设置唯一约束 B、Create table,Create index C、设置主键约束,Create index D、以上都可以 7、 在Transact-SQL语法中,用来插入数据的命令是(___),用于更新的命令是(___)。 A、INSERT,UPDATE B、UPDATE,INSERT C、DELETE,UPDATE D、CREATE,INSERT INTO 8、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但至少包括的部分(1___),使用要害字(2___)可以把重复行屏蔽,将多个查询结果返回一个结果集合的运算符是(3___),假如在SELECT语句中使用集合函数,一定在后面使用(4___)。 ⑴ A、SELECT,INTO B、SELECT,FROM C、SELECT,GROUP D、仅SELECT ⑵ A、DISTINCT B、UNION C、ALL C、TOP ⑶ A、JOIN B、UNION C、INTO C、LIKE ⑷ A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE 9、视图是一种常用的数据对象,它是提供(1___)和(1___)数据的另一种途径,可以简化数据库操作,当使用多个数据表来建立视图,表的连接不能使

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧