1.master.dbo.xp_cmdshell ' osql -U sa -P 密码 -i c:\aa.sql'
--c:\aa.sql为脚本的路径
在程序中执行上面的语句就可以运行SQL脚本
2.如果SQL语句中含有GO,因为GO不是SQL语句,所以程序执行时,遇到GO则无法解释是什么东西.故而报错.
方法是修改你的程序流程:
连接数据库--〉逐条读的脚本 --> 判断当前读到的行是否GO
--> 如果不是,累加存入一个变量(缓冲区) --> 继续读取直到完成
--> 如果是GO --〉将文字传给command-->recordSet执行command --> 清空缓冲区 --> 继续读取直到完成
注:GO 不是 Transact-SQL 语句;
而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。
SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。SQL 查询分析器和 osql 及 isql 命令提示实用工具执行 GO 命令的方式不同。有关更多信息,请参见 osql 实用工具、isql 实用工具和 SQL 查询分析器。
GO 命令和Transact-SQL 语句不可在同一行上。但在 GO 命令行中可包含注释。
用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。
--c:\aa.sql为脚本的路径
在程序中执行上面的语句就可以运行SQL脚本
2.如果SQL语句中含有GO,因为GO不是SQL语句,所以程序执行时,遇到GO则无法解释是什么东西.故而报错.
方法是修改你的程序流程:
连接数据库--〉逐条读的脚本 --> 判断当前读到的行是否GO
--> 如果不是,累加存入一个变量(缓冲区) --> 继续读取直到完成
--> 如果是GO --〉将文字传给command-->recordSet执行command --> 清空缓冲区 --> 继续读取直到完成
注:GO 不是 Transact-SQL 语句;
而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。
SQL Server 实用工具将 GO 解释为应将当前的 Transact-SQL 批处理语句发送给 SQL Server 的信号。当前批处理语句是自上一 GO 命令后输入的所有语句,若是第一条 GO 命令,则是从特殊会话或脚本的开始处到这条 GO 命令之间的所有语句。SQL 查询分析器和 osql 及 isql 命令提示实用工具执行 GO 命令的方式不同。有关更多信息,请参见 osql 实用工具、isql 实用工具和 SQL 查询分析器。
GO 命令和Transact-SQL 语句不可在同一行上。但在 GO 命令行中可包含注释。
用户必须遵照使用批处理的规则。例如,在批处理中的第一条语句后执行任何存储过程必须包含 EXECUTE 关键字。局部(用户定义)变量的作用域限制在一个批处理中,不可在 GO 命令后引用。