我做了一段数据库的sql 语句
insert into .....goinsert into ....go保存于一个文件。
当我在程序中点击一个按钮后,读出了这个文件的这些内容出来,并要用
sqlcommand更新到数据库里去,但点了更新后就出错,catch出来的话是第x行go附近有语法错误。但这段话在查询分析器里没有任何问题,如果把go去掉也没有任何问题,请问如何处理这个sql 的go呢?

解决方案 »

  1.   

    如果任务中包含多个语句,那么可以将它们分组,然后可以一次执行一个批处理。为了标明批处理的结束,请使用 GO 命令。从一个 GO 命令到下一个 GO 命令的所有 SQL 语句都被发送到一个批处理,以便于 OLE DB 提供程序执行。
    CREATE DEFAULT、CREATE PROCEDURE、CREATE RULE、CREATE TRIGGER 和 CREATE VIEW 语句不能在批处理中与其它语句组合使用。批处理必须以 CREATE 语句开始。所有跟在该批处理后的其它语句将被解释为第一个 CREATE 语句定义的一部分。所以在insert后面是可以不加go的.
      

  2.   

    在程序里运行是不能加go的.你按go分段取出执行就可以了
      

  3.   

    我随便举例的,其实我是想初始化一些存储过程进去客户的数据库里,所以在文件里有
    create proc ...
    ...gocreate proc ...
    ...go如果要分段执行,那么不是要一个存储过程一个存储过程读出来执行,不是很麻烦??难道不能一次性地执行?
      

  4.   

    不要用go,用分号就可以表示是两条语句------------------------
    http://fenglin.xland.cn
    ------------------------
      

  5.   

    实际上这个go是几个语句的分隔符,
    当有go的时候就把上一个go开始的语句一次性执行,
    当在SqlCommand中执行的时候,可以先把带有go的语句脚本按go把它们分成一批批的分别执行就可以了.
      

  6.   

    我倒没有试过用Split按go来分开后执行这样的语句,楼主可以试试用string.Split分开语句.
      

  7.   

    主要是,如果不用go的话,连在查询分析器都执行不了的!因为create proc必须是第一句,所以如果是
    create proc ...
    ..create proc...
    ..
    就出错了!肯定中间要有go才能执行
      

  8.   

    用了string.split可以处理,问题是如果语句中有go,比如goto之类的,又会出错了
      

  9.   

    如果是这样的语句呢
    IF EXISTS (SELECT * 
       FROM   sysobjects 
       WHERE  name = N'<scalar_function_name, sysname, test_function>')
    DROP FUNCTION <scalar_function_name, sysname, test_function>
    GOCREATE FUNCTION <scalar_function_name, sysname, test_function> 
    (<@param1, sysname, @p1> <data_type_for_param1, , int>, 
     <@param2, sysname, @p2> <data_type_for_param2, , int>)
    RETURNS <function_data_type, ,int>
    AS
    BEGIN
    <function_body, , RETURN @p1 + @p2 >
    -- eg.
    -- DECLARE @sum AS int
    -- SELECT @sum = @p1 + @P2
    -- RETURN @sum
    END
    GO
    这个GO如何处理