none
怎样在c#中创建数据库视图? RRS feed

  • 问题

  • 如题。要求先检查视图是否存在,如果存在,则先删除再创建,如果不存在,则直接创建。我的代码如下:

    string sql = @"if exists(select * from sys.views where name='MyView')
    			 drop view MyView
    			go
    			create view MyView
    			as
    			select * from table1
    			go";
    ExecuteNonQuery(sql);
    但报错提示“go附近有语法错误,create view必须是查询批次中的第一个语句”,应该怎样处理才正确?


    • 已编辑 seewold 2015年2月2日 6:13
    2015年2月2日 6:04

答案

  • Hello,

    >>SQL SERVER试过的,也是可以的,就是不知道在C#中怎么处理。

    不知道你是不是用的ADO.NET的方式去执行这个批处理脚本的,如果是话,GO这个关键字在T-SQL是不能被正确识别的。有两种方式可以解决:

    一个是继续用ADO.NET API,但是需要执行两次语句:

    SqlCommand cmd = new SqlCommand("if exists(select * from sys.views where name='MyView') drop view MyView", con);
    
                        cmd.ExecuteNonQuery();
    
                        cmd = new SqlCommand("create view MyView as select * from [Order]", con);
    
                        cmd.ExecuteNonQuery();
    


    还有一种用SMO API,这个可以正确的识别GO关键字,具体做法可以参考这篇blog:

    http://weblogs.asp.net/jongalloway/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_-the-easy-way

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 seewold 2015年2月3日 3:40
    2015年2月3日 3:07
    版主

全部回复

  • 语句本身应该是没什么错误的, 你有在SQL Server中试过吗?

    我这边是可以执行的.

    建议你拿相同的语句去SQL server里面试一下吧.


    My Blog
    Please use Make as Answer if my post solved your problem and use Vote As Helpful if a post was useful.

    2015年2月2日 15:20
  • 在SQL SERVER试过的,也是可以的,就是不知道在C#中怎么处理。
    2015年2月3日 2:35
  • Hello,

    >>SQL SERVER试过的,也是可以的,就是不知道在C#中怎么处理。

    不知道你是不是用的ADO.NET的方式去执行这个批处理脚本的,如果是话,GO这个关键字在T-SQL是不能被正确识别的。有两种方式可以解决:

    一个是继续用ADO.NET API,但是需要执行两次语句:

    SqlCommand cmd = new SqlCommand("if exists(select * from sys.views where name='MyView') drop view MyView", con);
    
                        cmd.ExecuteNonQuery();
    
                        cmd = new SqlCommand("create view MyView as select * from [Order]", con);
    
                        cmd.ExecuteNonQuery();
    


    还有一种用SMO API,这个可以正确的识别GO关键字,具体做法可以参考这篇blog:

    http://weblogs.asp.net/jongalloway/Handling-_2200_GO_2200_-Separators-in-SQL-Scripts-_2D00_-the-easy-way

    Regards.


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 seewold 2015年2月3日 3:40
    2015年2月3日 3:07
    版主
  • 很好,非常感谢Fred Bao
    2015年2月3日 3:40