1

我有一个包含 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 通用以减少重复代码。是否有可能这样做。

谢谢

4

1 回答 1

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)

现在根据您的场景转换上述技术。

于 2012-09-04T05:28:57.257 回答