我有一个存储过程,其中包含超过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泛型减少重复代码。甚至可以这样做。
由于
答案 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)
现在根据你的场景转换上面的技术。