首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

请教需要多个视图作为中间过程的存储过程如何写比较方便

2012-02-08 
请问需要多个视图作为中间过程的存储过程怎么写比较方便?创建第一个视图:aaaSELECTDISTINCTTOP100PERCENT

请问需要多个视图作为中间过程的存储过程怎么写比较方便?
创建第一个视图:aaa
SELECT   DISTINCT   TOP   100   PERCENT   事件号,   结果
FROM   dbo.工作表

在aaa基础上创建第二个视图:bbb
SELECT   结果,   LEFT(事件号,   4)   AS   前四位,   RIGHT(事件号,   1)   AS   末位
FROM   dbo.aaa

以视图bbb   为基础   创建存储过程:
declare   @sql   varchar(8000)
set   @sql   =   'select   前四位 '
select   @sql   =   @sql   +   ',sum(case   末位   when   ' ' '+末位+ ' ' '   then   结果   end)   [ '+末位+ '] '
from   (select   distinct   末位   from   bbb)   as   a
select   @sql   =   @sql+ '   from   bbb   group   by   前四位 '
exec(@sql)

上面过程需要创建2个视图作为中间过程,不用视图改用临时表也可以完成,但性能可能会差点,大家说用哪种好?或者有更好的办法?

[解决办法]
建議不要用視圖,直接用存儲過程就行了(裏面可以用臨時表)

[解决办法]
你的兩個視圖只是在存儲過程內部用,覺得沒什麼必要,可以直接創建一個臨時表來實現

--創建臨時表#T
SELECT DISTINCT 结果, LEFT(事件号, 4) AS 前四位, RIGHT(事件号, 1) AS 末位 Into #T
FROM dbo.工作表

--以臨時表 为基础 创建存储过程:
declare @sql varchar(8000)
set @sql = 'select 前四位 '
select @sql = @sql + ',sum(case 末位 when ' ' '+末位+ ' ' ' then 结果 end) [ '+末位+ '] '
from #T Group By 末位
select @sql = @sql+ ' from #T group by 前四位 '
exec(@sql)

--刪除臨時表
Drop Table #T

热点排行