根据条件更改条款

时间:2012-09-04 05:21:27

标签: sql-server sql-server-2005

我有一个存储过程,其中包含超过2000行代码。我需要根据条件更改from clause中的表名。列名在两个表中都保持相同。

例如: -

   Declare @condition char(1)
   set @condition=(Select close_flg from log 
                   where  last_run_dt >= 
                  (Select  cur_dt from dt) 
                  )

  --If @condition is 'A' then below sql will execute

   Select a.columnA,
        Case 
         when  @condition='A' then  'D'
         Else 'M'
         END,
         b.ColumnC
   from TableA as a
   inner join TableB as b
   on a.Column=b.Column

现在如果@condition是'B',那么我需要将sql更改为 (只有内连接不同,所以选择查询中的所有列都相同)

   Select 
   -- the same columns as above 
   from TableC as c
   inner join TableD as d
   on c.Column=d.Column

我想让我的SQL泛型减少重复代码。甚至可以这样做。

由于

1 个答案:

答案 0 :(得分:2)

您可以对您的方案使用动态查询,如下所示:

DECLARE @sqlCommand varchar(1000)
DECLARE @TableName varchar(75)

--If @condition is 'A' then 
Set @TableName = 'your table name'
--else
Set @TableName = 'your other table name'


SET @sqlCommand = 'select * from '+@TableName
EXEC (@sqlCommand)

现在根据你的场景转换上面的技术。