现在有两个脚本文件
a.sql
b.sqla里面根据需要可能会执行b.sql请问应该怎么调用,谢谢

解决方案 »

  1.   

    执行a可以先通过程序读出来,再执行。咱们能不能不讨论为什么要这么做,只讨论怎么才能实现。Oracle里面直接在文件名前面加个@就可以执行那个文件里面的内容了难道SQLServer不可以吗?
      

  2.   

    使用master..cmdshell ,
    调用 osql 读取即可.
    osql   -U   用户名   -P   密码   -i   SQL文件名(全路径)
    不能像Oracle那样直接读取的,
    必须在Osql环境中才能读取,
    相当于在Oracle的pl/sql环境中一样.
      

  3.   


    /*
     script a.sql
     location c:\a.sql
    */
    USE [CSDN]
    GO
    print '-------------------------'
    print '-- aaaaaaaaaaaaaaa.sql --'
    print '-------------------------'
    GO/*
     script b.sql
     location: c:\b.sql
    */
    USE [CSDN]
    GO
    print '-------------------------'
    print '-- bbbbbbbbbbbbbbb.sql --'
    print '-------------------------'
    GO
    exec master..xp_cmdshell 'osql -E -e -i c:\a.sql'
    go
    exec master..xp_cmdshell 'osql -E -e -i c:\b.sql'
    /*
    output
    ----------------------------
    1> 2> 3> 4> 5> 6> /*
     script a.sql
     location c:\a.sql
    */
    USE [CSDN]
    1> 2> 3> 4> -------------------------
    print '-------------------------'
    print '-- aaaaaaaaaaaaaaa.sql --'
    print '-------------------------'
    -- aaaaaaaaaaaaaaa.sql --
    -------------------------
    1> (12 row(s) affected)output
    ----------------------------------------
    1> 2> 3> 4> 5> 6> /*
     script b.sql
     location: c:\b.sql
    */
    USE [CSDN]
    1> 2> 3> 4> -------------------------
    print '-------------------------'
    print '-- bbbbbbbbbbbbbbb.sql --'
    print '-------------------------'
    -- bbbbbbbbbbbbbbb.sql --
    -------------------------
    1> (12 row(s) affected)
    */
      

  4.   

    osql 实用工具
    http://technet.microsoft.com/zh-cn/library/ms162806.aspx
      

  5.   


    /*
     script a.sql
     location c:\a.sql
    */
    USE [CSDN]
    GO
    print '-------------------------'
    print '-- aaaaaaaaaaaaaaa.sql --'
    exec master..xp_cmdshell 'osql -E -e -i c:\b.sql' -- 添加到a.sql中
    print '-------------------------'
    GO
    /*
     script b.sql
     location: c:\b.sql
    */
    USE [CSDN]
    GO
    print '-------------------------'
    print '-- bbbbbbbbbbbbbbb.sql --'
    print '-------------------------'
    GOexec master..xp_cmdshell 'osql -E -e -i c:\a.sql'
    --exec master..xp_cmdshell 'osql -E -e -i c:\b.sql' -- 从此处去掉,
    go/*
    output
    -------------------------
    1> 2> 3> 4> 5> 6> /*
     script a.sql
     location c:\a.sql
    */
    USE [CSDN]
    1> 2> 3> 4> 5> -------------------------
    print '-------------------------'
    print '-- aaaaaaaaaaaaaaa.sql --'
    exec master..xp_cmdshell 'osql -E -e -i c:\b.sql'
    print '-------------------------'
    -- aaaaaaaaaaaaaaa.sql --
     output                                 
    -----------------------------------
     1> 2> 3> 4> 5> 6> /*                   
      script b.sql                          
      location: c:\b.sql                    
     */                                     
     USE [CSDN]                             
     1> 2> 3> 4> ------------------------- 
     print '-------------------------'      
     print '-- bbbbbbbbbbbbbbb.sql --'      
     print '-------------------------'      
     -- bbbbbbbbbbbbbbb.sql --              
     -------------------------              
     1>                                    */
      

  6.   

    osql/sqlcmd都可以执行,用联机看一下用法就行了