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   命令后引用。