总是不能执行完全  是報錯了嗎?
好像隻有 EXEC master..xp_cmdshell ....這種方式

解决方案 »

  1.   

    即如果这25个sql文件全都是创建试图的,
    那么可能最后可能只有12个试图被创建成功,
    我把错误输出到ERROR.TXT里面了,有报错。这是不加延迟的输出结果
    1> 2> 3> 1> 2> 3> 1> 2> 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 18> 1> 2> 1> 2> 1> 2> > 1> 2> 1> 2> 1> 2> > 29> 30> 31> 32> 33> 34> 35> 36> 37> 38> 39> 40> 41> 42> 1> 2> 1> 2> 1> 2> VIEW_MemberLevelAlways,行 4
    对象名 'dbo.VIEW_MemberRetailAlways' 无效。
    1> 2> 这是加上延迟后的输出结果
    1> 2> 3> 1> 2> 3> 1> 2> 1> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 12> 13> 14> 15> 16> 17> 1> 2> 1> 2> 1> 2> 执行的东西是一模一样的!
    下面是我的调用语句
    For i As Integer = 1 To Me.Txt_Display.Lines.Length - 1
                FilePath = Me.Txt_Display.Lines(i - 1)            StrExe = "osql -i " & FilePath & " -d " & MyPub.MyDatabaseName & " -U " & MyPub.MyLoginName & " -S " & MyPub.MyServerName & " -P " & MyPub.MyLoginPass & " -o C:\ERROR.txt -b"
                ReturnValue = Shell(StrExe, AppWinStyle.Hide)
                'ReturnValue = Shell(StrExe, AppWinStyle.NormalFocus)
                'Thread.Sleep(1000)
            Next被屏蔽掉的是加上延迟的
      

  2.   

    你要创建的视图依赖的对象不存在嘛. 
    缺少 dbo.VIEW_MemberRetailAlways如果这个对象也是要创建的,那就是你创建的顺序搞错了.
      

  3.   

    阿!我看见了
    一个试图是依赖于另一个试图的,但是顺序是没错的阿!
    这两个sql文件之间只隔了一个sql文件
    有没有可能第一个sql没有执行完毕的时候第三个就开始执行了?
      

  4.   

    可能是,因为你那样提交的顺序就受你程序的控制,是由osql将语句提交的,可能会产生提交延迟的情况.
      

  5.   

    我怎么控制?邹大哥,帮帮我!
    我延迟加了一秒,试验了几次,没有问题
    但是万事无绝对阿
    osql的返回参数都被shell屏蔽掉了
    我如何得到返回参数来判断是否执行完毕阿?
      

  6.   

    将几个文件合并成一个.sql文件,一次性提交不就行了吗? 为什么要提交多个.sql文件?
      

  7.   

    或者用API控制Shell,使它执行完成后,再执行下一个shell
      

  8.   

    因为我从SQL Server中导出的肯定是一个一个的sql文件,
    不可能我再打开sql文件把所有脚本粘贴拷贝到一个文件里阿
      

  9.   

    当然可以啦,你甚至可以自己写过程实现执行.sql文件.
      

  10.   

    '*************************************************************************
    '**函 数 名:s_ExecuteSqlFile
    '**功能描述:在指定的数据库对象中,执行指定的脚本文件
    '**输    入: sFileName     要执行的脚本文件名
    '**        : iDb           数据库对象,要求是:ADODB.Connection
    '**        : sPassword     登陆密码
    '**输    出: 无
    '**调用模块: 无
    '**作    者: 邹建
    '**日    期: 2004年03月09日
    '*************************************************************************
    Sub s_ExecuteSqlFile(ByVal sFileName$, ByVal iDb As Object)
        Dim iFn As Object
        
        Dim iSql$, iStr$
        
        Set iFn = CreateObject("FileSystemObject").OpenTextFile("c:\1.txt", 1)
        
        With iFn
            While .AtEndOfStream = False
                iStr = iFn.ReadLine
                If UCase(iStr) = "GO" Then
                    If iSql <> "" Then
                        iDb.Execute iSql
                        iSql = ""
                    End If
                Else
                    iSql = iSql & vbCrLf & iStr
                End If
            Wend
    If iStr<>"" Then iDb.Execute iSql
            iFn.Close
        End With
    End Sub
    '调用示例
    '要求引用Microsoft ActiveX Data Objects 2.x Library
    '
    '数据库连接字符串模板
    '身份验证模式为:"sql server和windows"
    'Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名
    '
    '身份验证模式为:"仅windows"
    'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=数据库名;Data Source=SQL服务器名Sub test()
        Dim iDb As ADODB.Connection
        Dim iConn$
        
        '数据库连接字符串    iConn = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=用户名;Password=密码;Initial Catalog=数据库名;Data Source=SQL服务器名"
        
        Set iDb = New ADODB.Connection
        iDb.Open iConn
        
        s_ExecuteSqlFile "c:\a.sql", iDb '执行脚本文件: c:\a.sql
        
        iDb.Close
        Set iDb = Nothing
    End Sub
      

  11.   

    你用类似上面的处理方式来执行.sql文件,就可以解决异步的问题.
      

  12.   

    阿!还有一问题
    osql是不是不支持超过8位的文件夹和文件名,也不支持中文
      

  13.   

    根本就不执行
    连error.txt都没有
      

  14.   

    自己写程序啦,调用osql那么烦,又不好控制错误. 我上面的建个过程不是已经实现了类似osql的功能吗?
      

  15.   

    不研究究竟,难道去碰运气?shell执行程序使用的是异步方式,也就是说它不等被执行的程序结束(不监视窗口的关闭)就立刻去执行下面的语句。
      

  16.   

    使用api方式去替换shell可以。也可以让每一个脚本首先循环检查创建条件,如果它需要其它对象,就应该首先循环等待对象生成。
      

  17.   

    哦!对不起!zjcxc(邹建) 
    感谢之至!
    也谢谢w_rose(w_rose) 对我的解答!
    结了!