如何在C#中构造如下语句(一定要带go,而且我不想分成多条语句):
create view V_Table1 as select * from Table1
go
insert into Table2(Name,Re) valus('AAA',null)
go我试了char(10)+char(13),空格,System.Environment.NewLine等方法,都不行,监视字符串的值,即使是得出这样的sql语句,直接在数据库中可以执行,但是在程序中报语法错误

解决方案 »

  1.   

    我利用SSMS保存SQL语句为.sql文件,然后用Hex打开,显示换行是 0D 0A,应该是对应的\r\n你再试试这样,保证每行后面都有\r\n作为换行符。
    string sql = "create view V_Table1 as select * from Table1\r\ngo\r\ninsert into Table2(Name,Re) valus('AAA',null)\r\ngo\r\n";
      

  2.   

    跟换行符没有任何关系...GO压根儿就不是T-SQL语句,而是SQL Server utilities命令,客户端驱动或工具都不支持...
      

  3.   

    那就是在程序中构造sql语句不能加go了?
    也就是说去掉go之后的复合sql语句就是被sql server作为一个执行单元处理了?
    也就是说如果要达使用go的效果的话,就要在程序中分步执行了?
      

  4.   

    精辟!我也没见过T-SQL里有go关键字。
    如果在程序中用分号";"分割多条sql语句,如:
    string strSql= create view V_Table1 as select * from Table1;insert into Table2(Name,Re) value('AAA',null)
     ";在sql server语法解析的过程中,会把解析为两个执行单元吗?如下
    create view V_Table1 as select * from Table1
    go
    insert into Table2(Name,Re) valus('AAA',null)
    go
    ---------------------------------------------
    还是解析为一下等价语句?
    create view V_Table1 as select * from Table1
    insert into Table2(Name,Re) valus('AAA',null)
    go
      

  5.   

    如果是 MSSQL的话create view V_Table1 as select * from Table1;
    insert into Table2(Name,Re) valus('AAA',null);
      

  6.   

    我知道可以用分号";",我的意思是用分号后sql server语法解释器会解释为哪种等价语句?
      

  7.   

    你分2次执行吧!~~~或者你写个存储过程,在存储过程里面用事务执行多条sql语句吧,你可以把语句作为参数传进去~~你这样不麻烦吗?
      

  8.   


    我认为是:
    create view V_Table1 as select * from Table1
    insert into Table2(Name,Re) valus('AAA',null)因为这是在同一个批次中。
      

  9.   

    我的意思是如果两条语句之间加上分号后是提交一次还是提交两次?string strSql= create view V_Table1 as select * from Table1;insert into Table2(Name,Re) value('AAA',null)sql server语法解析的过程中,会把语句解析为两个执行单元吗?如下
    create view V_Table1 as select * from Table1
    go
    insert into Table2(Name,Re) valus('AAA',null)
    go
    ---------------------------------------------
    还是解析为一下等价语句?
    create view V_Table1 as select * from Table1
    insert into Table2(Name,Re) valus('AAA',null)
    go
      

  10.   

    GO 用信号通知   MicrosoftSQLServer;   实用工具一批 Transact-SQL 语句的结束。 
    语法 
    GO 
    注释 
     GO   不是 Transact-SQL 语句;而是可为 osql 和 isql 实用工具及 SQL Server 查询分析器识别的命令。还有 create view V_Table1 as select * from Table1;和
    insert into Table2(Name,Re) valus('AAA',null);一起执行是不可能的,create view 必须是批处理仅有语句
      

  11.   

    用带变量的代码说明可能更直观些。下面的代码用在SSMS和C#代码中都没问题:
    declare @x int;
    set @x = 1;
    select @x;但如果用了GO即使在SSMS中也会报错,说明不在一个批次中了:
    declare @x int;
    go
    set @x = 1;
    go
    select @x;
    go
      

  12.   

    假如是两条insert语句或其它语句,我是指普遍情况(应该是我例子举的不太恰当,没注意create view,好像create语句都是必须是批处理仅有语句?)现在换成两个insert语句:
    insert into Table1(Name,Re) valus('AAA',null);
    insert into Table2(Name,Re) valus('BBB',null)sql server会把上面的sql字符串分两次执行还是一次执行?
      

  13.   

    先insert into Table1(Name,Re) valus('AAA',null);
    后insert into Table2(Name,Re) valus('BBB',null)
    在一个批处理
      

  14.   

    天气热,大家都热晕了,有点答非所问了。
    是可以,我知道。重点在下面:
    insert into Table1(Name,Re) valus('AAA',null);
    insert into Table2(Name,Re) valus('BBB',null)sql server会把上面的sql字符串分两次执行还是一次执行?