动态拼接SQL计算公式

 1 --模拟数据
 2 IF OBJECT_ID('tempdb..#t')>0 DROP TABLE #t
 3 SELECT * INTO #t
 4 FROM (
 5 SELECT '1' id,2030 g,265 h, 830 k,'g*h+h*k' gs,0 tt
 6 UNION ALL
 7 SELECT '2' id,2030 g,0 h, 0 k,'g*4' gs,0 tt
 8 UNION ALL
 9 SELECT '3' id,2030 g,265 h, 0 k,'(g+h)*2' gs,0 tt
10 UNION ALL
11 SELECT '4' id,2030 g,265 h, 0 k,'(g+h)*2' gs,0 tt)t
12 --原始数据
13 SELECT * FROM #t
14 
15 --变量
16 DECLARE @i int,@n INT
17 DECLARE @gs VARCHAR(50)
18 DECLARE @sql VARCHAR(MAX)
19 
20 --按公式类别分类
21 IF OBJECT_ID('tempdb..#tt')>0 DROP TABLE #tt
22 SELECT ROW_NUMBER()OVER(ORDER BY gs)rowid 
23 ,gs 
24 INTO #tt
25 FROM #t
26 GROUP BY gs
27 
28 --按公式类别遍历
29 SELECT @i=MIN(rowid),@n=MAX(rowid) FROM #tt
30 WHILE(@i<=@n)
31 BEGIN
32 SELECT @gs=gs FROM #tt WHERE rowid=@i
33 SET @sql='update #t set tt='+@gs+' where gs='''+@gs+''''--生成脚本
34 EXEC(@sql)--执行脚本,可以print看效果
35 SET @i=@i+1
36 END
37 --处理后效果
38 SELECT * FROM #t

效果预览:

 

posted @ 2014-06-20 16:03  欧迪。  阅读(1706)  评论(0编辑  收藏  举报