Select top(@MaxItems) From books希望MaxItems为null或者为0时候能返回所有的数据,怎么写?

解决方案 »

  1.   

    top  不能用变量,可以set rowcount @MaxItems 代替
      

  2.   

    在数据库中不能这样写.
    但可变通string sCount = "";
    int iCount  = 0;
    ****if(iCount > 0)
    sCount  = " top "+ iCount.ToString();strSQL = "Select "+ sCount +" * FROM books"
      

  3.   

    if(@MaxItems=0)
    Select  * From books
    else
    Select top(@MaxItems)  * From books
      
    *****************************************************************************
    欢迎使用CSDN论坛阅读器 : CSDN Reader(附全部源代码) 
    http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
      

  4.   

    不过实际上用的sql语句很复杂啊,如果每次改变iCount的值都要重新构建Sql的话很复杂...
      

  5.   

    string.Format("if @MaxItems>0 begin select top {0}* From books end else begin select * From books end",@MaxItems);
      

  6.   

    建立一个存储过程, 只要调用的时候指定参数就可以了:CREATE PROCEDURE [dbo].[SelectMax] 
    @MaxItems int=0   /*指定默认值*/
    ASif (@MaxItems = 0)
        Select * From News
    else
    begin
        set rowcount @MaxItems
        Select * From News
    endGO
      

  7.   

    DECLARE @MaxItems INT
    SET @MaxItems=0 --这里只是随便给个值,实际上这个值不可预知
    SELECT @MaxItems= ISNULL(NULLIF(@MaxItems,0),10000000)EXEC('SELECT TOP ' + @MaxItems + ' * FROM books')
    或者直接
    SET ROWCOUNT ISNULL(@MaxItems,0)
    SELECT * FROM books
    SET ROWCOUNT 0
      

  8.   

    上面第二种写法错了.
    SET ROWCOUNT中不能用函数,写忘了.SELECT @MaxItems=ISNULL(@MaxItems,0)
    SET ROWCOUNT @MaxItems
    SELECT * FROM books
    SET ROWCOUNT 0