在每个CREATE PROCEDURE前加GO

解决方案 »

  1.   

    sql脚本没有问题,在.net中不能有GO, 否则运行时是会有问题的,这已是共识了。
      

  2.   

    你不能把sql语句构成字符串传给sql server去执行吗.
      

  3.   

    sdhylj(青锋-SS)大哥,你能再具体一点吗?
      

  4.   

    .net以前用过,忘的差不多了,你可以把整个要执行的sql代码赋给一个字符串,然后像提交insert/update语句那样交给数据库去执行.
      

  5.   

    sdsxlj(携飞仙以遨游,抱明月而长终.) :ResourceHelper.GetSqlScript()就是获取的资源脚本,然后赋给字符串,再用SqlCommand(string,SqlConnection)和Command.ExecuteNonQuery()执行的;就是在这样的程序下出的问题:不能在同一个SQL脚本嵌入资源中有多个存储过程。我加了26个啊,苦~~~~~~~
    h_lj(贝塔) :用;就更不行了,用;脚本都会有问题。
      

  6.   

    Create procedure  存儲名
    as
    declare @sql....varchar....
    select @sql ...
    from ......group by ....
    exec(@sql)..............
    go太激動了,Go錯地方了!呵呵~~~~
      

  7.   

    你把SQL腳本轉成字串,是不能直接執行的.
    比如
    create proc A as select 1 GO create proc B as select2 在SQL中編譯通不過,
    而用
    create proc A as select 1
    GO
    create proc B as select 2  可以執行.(好像是換行回車的問題,具體偶也不懂)//個人覺得可以使用變通的方法,比如你的sql腳本改成如下樣子,
    即在每個proc結束後,go前加空格,使用--注釋,後加分號;create proc A as select 1
     GO
     --;
    create proc B as select 2
     GO
     --;
    create proc C as select 3
     GO
     --;
    create proc D as select 4
     GO//在.net程式中,讀成string,使用split方式分隔,循環執行,比如在C#中:SqlConnection sc=new SqlConnection("....");
    SqlDataAdapter da=new SqlDataAdapter();string sql="create proc A as select 1 GO --;create proc B as select 2 GO --;create proc C as select 3 GO --;create proc D as select 4 GO";string[] arr = sql.Split(new char[]{';'});
    sc.Open()
    for (int i=0;i<arr.Length;i++)
     {
      da.SelectCommand=new SqlCommand(arr[i].ToString(),sc);
      da.SelectCommand.ExecuteNonQuery();
      }
    sc.Close();
      

  8.   

    不過...偶覺得應該有別的方法的~~~比如調用SQL 查詢分析器直接運行sql腳本不知道行不行...
      

  9.   

    调用isql也是一个办法。
    运行时把资源提取出来存成一个临时文件,然后调用isql执行,但这须要运行的机器上有sql客户端.
      

  10.   

    playwarcraft(时间就像乳沟,挤挤还是有的):谢谢,原来如此!