表(表是空的)
Categories
列 
商品id/CatId
简称/CatShortName
排序/rank
上级分类/ParentCatId  数据0 表示顶级分类要求建一个存储过程
查询产品分类表;
获取前N条记录;
按Rank值从低到高排序;
取分类的短名称;
该分类必须是顶级分类;变量跟 top一有关系 我就不会了 想不出怎么写了

解决方案 »

  1.   

    最好给出完整的表结构,测试数据,计算方法和正确结果.否则耽搁的是你宝贵的时间。
    如果有多表,表之间如何关联?
    发帖注意事项
    http://topic.csdn.net/u/20091130/21/fb718680-98ff-4afb-98d8-cff2f8293ed5.html?24281
      

  2.   


    create proc sp_getCategories(@a int)
    as
    begin
    exec(N'select top ' + @a + N' CatShortName from Categories where ParentCatId = 0 order by rank')
    end
    go
      

  3.   

    CREATE TABLE Categories
    (
    CatId INT,
    CatShortName NVARCHAR(100),
    [rank] INT,
    ParentCatId INT
    )
    INSERT Categories
    SELECT 1, N'商品1', 1, 0 UNION ALL
    SELECT 2, N'商品2', 2, 4 UNION ALL
    SELECT 3, N'商品3', 3, 0 UNION ALL
    SELECT 4, N'商品4', 4, 3 UNION ALL
    SELECT 5, N'商品5', 5, 1--#1.不太清楚你最终要的结果,感觉应该是和递归查询有关
    ;WITH cte_test AS
    (
        SELECT * FROM Categories
        UNION ALL
        SELECT a.* FROM Categories a, cte_test b WHERE a.CatId = b.ParentCatId
    )
    SELECT * FROM cte_test --自己修改一下这个语句达到你要的结果吧--#2.或许不用CTE,呵呵
    SELECT a.Catid, a.CatShortName FROM 
    (SELECT DISTINCT Catid, CatShortName FROM Categories WHERE ParentCatId = 0) a
    CROSS APPLY
    (SELECT * FROM Categories WHERE Catid = a.Catid) b
    ORDER BY b.[rank]可参考:http://topic.csdn.net/u/20110125/09/ba3cd9f7-4680-43c2-b228-c3184e405f7d.html
      

  4.   


    方法1:
    declare @top int,
    @sql varchar(2000)
    set @top=10
    set @sql='select top ' + convert(varchar,@top) + 
    ' CatShortName from Categories where ParentCatId=0 order by rank'
    exec (@sql)
    方法2:
    declare @top int
    set @top=10
    exec ('select top ' + @top + ' CatShortName from Categories where ParentCatId=0 order by rank')
    方法3:
    declare @top int
    set @top=10
    set rowcount @top
    select CatShortName from Categories where ParentCatId=0 order by rank
    set rowcount 0