存储过程中使用order by @cn desc提示错误 //@cn为列名变量
下面是错误:由order by编号1标识的select项包含一个变量,作为标识列位置的表达式的一部分按照引用列名的表达式排序时,只允许使用变量。

解决方案 »

  1.   


    select top 10 number into # from master..spt_values where type='p'--不用参数 正确
    select * from # order by 1/*
    number      
    ----------- 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9(所影响的行数为 10 行)*/--使用参数  错误
    declare @i int
    set @i=1
    select * from # order by @i
    /*
    服务器: 消息 1008,级别 15,状态 1,行 3
    ORDER BY 子句所标识的第 1 个 SELECT 项包含了一个变量,该变量位于标识列位置的表达式中。只有排序依据表达式引用的是列名时,才允许在该表达式中使用变量。
    */--修改 如下
    declare @i int
    set @i=1
    exec ('select * from # order by '+@i)
    /*
    number      
    ----------- 
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9*/drop table #
      

  2.   

    declare @str varchar(200)set @str='select * from tb order by '+@cn+' desc '
    exec(@str)