例如我有这样的一个存储过程
ALTER PROCEDURE [dbo].[P_test]
@tag int,
@startdate datetime,
@enddate datetime
as
declare @order varchar(300)
if(@tag=0)
set @order=' order by tag desc'
if(@tag=1)
set @order=' order by id desc'select * from dict where date between @startdate and @enddate 问:怎么讲@order 参数写到select语句后面

解决方案 »

  1.   

    --try:
    ALTER PROCEDURE [dbo].[P_test] 
    @tag int, 
    @startdate datetime, 
    @enddate datetime 
    as 
    declare @order varchar(300) 
    -- if(@tag=0) 
    -- set @order=' order by tag desc' 
    -- if(@tag=1) 
    -- set @order=' order by id desc' select * from dict where date between @startdate and @enddate 
    order by case when @tag=0 then tag else id end desc
      

  2.   


    ALTER PROCEDURE [dbo].[P_test] 
    @tag int, 
    @startdate datetime, 
    @enddate datetime 
    as 
    declare @order varchar(300) 
    if(@tag=0) 
    set @order=' order by tag desc' 
    if(@tag=1) 
    set @order=' order by id desc' exec('select * from dict where date between '+@startdate+' and '+@enddate+ @order)
      

  3.   

    ALTER PROCEDURE [dbo].[P_test] 
    @tag int, 
    @startdate datetime, 
    @enddate datetime 
    as 
    declare @order varchar(300) 
    if(@tag=0) 
    set @order=' order by tag desc' 
    if(@tag=1) 
    set @order=' order by id desc' 
    exec('select * from dict where date between '''+@startdate+''' and '''+@enddate +''''+@order)
      

  4.   

    exec ('select * from dict where date between '+@startdate+' and '+@enddate+@order)
      

  5.   

    exec('select * from dict where date between '+@startdate+' and '+@enddate+ @order)