小弟一张表是酒店表(HOTEL)---SQL数据库
里面有这么几个字段 城市ID(@CityID),酒店名(@HotelName),酒店星级(@Star),价格(@Price)我的意图是 用户在WEB页面上可以通过这么几个字段去查酒店信息。可以一下指定4个字段,也可以指定这4个字段中的某一个或某几个字段来查信息。如果不指定的话就是查询所有的酒店信息。我想用一个存储过程写,可是不知道该怎么写才是最好的。如果挨个判断传进来的参数是否都有值,那样的话一共有N种情况。这样写实在太麻烦,也不够高效率。希望哪位朋友告诉我一下如何才能写出一个比较好的存储过程。如果一个存储过程不能实现,也希望帮我写一下。谢谢。另外,如果这个不在数据库里写复杂的语句,而是在WEB曾实现,希望大家给我一个思路。

解决方案 »

  1.   

    拼写 SQL 语句吧
    就是你用存储过程,里面一样还是要拼写SQL 语句
    然后再执行
      

  2.   

    StringBuilder sql = new StringBuilder();
    sql.Append("SELECT ColumnName FROM Table");
    sql.Append("WHERE 1=1");
    if ( column1Name.Length != 0 )
    {
        sql.Append("AND Condition");
    }
      

  3.   

    把这几字段放到数组中 如果数组的长度为0 用*
    不为0则把这个数组中的字段加到sql上面
      

  4.   

    例子而已,参考一下
    StringBuilder sql = new StringBuilder(DataFunction.GeneralSQL(typeof(CommodityInfo)));
    sql.Append(" WHERE 1 = 1");if ( commodityInfo.CommodityClassifyID != 0 )
    {
    sql.Append(String.Format(" AND CommodityClassifyID IN ( SELECT ID FROM CommodityClassify WHERE LocationString LIKE '%;{0};%' )", commodityInfo.CommodityClassifyID));
    }if ( commodityInfo.AreaID != 0 )
    {
    sql.Append(String.Format(" AND AreaID IN ( SELECT ID FROM Area WHERE LocationString LIKE '%;{0};%' )", commodityInfo.AreaID));
    }if ( commodityInfo.CommodityName.Length > 0 )
    {
    sql.Append(String.Format(" AND CommodityName LIKE '%{0}%'", DataFunction.FormatSQL(commodityInfo.CommodityName)));
    }if ( commodityInfo.DisplayName.Length > 0 )
    {
    sql.Append(String.Format(" AND DisplayName LIKE '%{0}%'", DataFunction.FormatSQL(commodityInfo.DisplayName)));
    }if ( dateDiffCount > 0 )
    {
    sql.Append(String.Format(" AND DATEDIFF(d, CreateTime, GETDATE()) <= {0}", dateDiffCount));
    }return SQLRunner.SplitPage(Config.ConnectionString, sql.ToString(), pageIndex, Config.PageItemCount, out recordCount, out pageCount, typeof(CommodityInfo));
      

  5.   

    TO tianjue0921(天珏):
    看来你非常厉害啊,回贴的技术含量更高,呵呵
      

  6.   

    select * from 表 where 字段1 like '%条件1%' and 字段2 like '%条件2%' and 字段3 like '%条件3%' 
    不知道理解对了没有
      

  7.   

    tianjue0921(天珏) 菜鸟怎么了,你不菜,你技术高,看看你自己的信誉.在这里最低.有技术没人品.
      

  8.   

    reaperwu(RQ) 大哥 DataFunction.GeneralSQL(typeof(CommodityInfo)) 这个方法在哪个名称空间下啊,我在帮助里也没有找到.我用的是c#
      

  9.   

    不好意思
    那是我自己写的一个函数来的,功能类似于
    StringBuilder sql = new StringBuilder("SELECT * FROM TableName");
      

  10.   

    DataFunction.FormatSQL
    SQLRunner.SplitPage,功能相当于dataAdapter.Fill(dataSet);
    这些也是自己封装的