1. 程式人生 > >Sqlserver 遊標&儲存過程&臨時表混合使用例項

Sqlserver 遊標&儲存過程&臨時表混合使用例項

通過巢狀,根據表中記錄的表名與列名到指定位置取值。

--宣告儲存過程   ProPIMS
if (exists (select * from sys.objects where name = 'ProPIMS'))
    drop proc ProPIMS
go 
create procedure ProPIMS
@dcsgroupinfo varchar(100),@dcsmcinfo varchar (150)
AS 
BEGIN

    declare @dcsgroup varchar(50),@mc varchar(50),@dw varchar(50),@tablename varchar
(50),@columnname varchar(50),@Columncount int; if exists(select * from tempdb..sysobjects where id=object_id('tempdb..##dcs_tablevalue')) drop table ##dcs_tablevalue; create table ##dcs_tablevalue ( tablename varchar(50), columnname varchar(50), value varchar(50
) ) declare @charsql varchar(500) if cursor_status('global','mycursor')=-3 and cursor_status('local','mycursor')=-3 declare mycursor cursor for select distinct dcsgroup,mc,dw,tablename,columnname from ( select a.dcsgroup,a.mc,a.dw,b.tablename,a.columnname
from dcsdata.dcsdatainf a left join dcsdata.dcsgroup b on a.dcsgroup = b.groupname )total open mycursor fetch next from mycursor into @dcsgroup,@mc,@dw,@tablename,@columnname while(@@FETCH_STATUS = 0) begin set @Columncount = 0; SELECT @Columncount = count(*) from syscolumns where name= @columnname and id=object_id(@tablename); if(@Columncount = 1) set @charsql = 'insert into ##dcs_tablevalue select top 1 '''+@tablename+''','''+@columnname+''',(select top 1 ' +@columnname +' from '+ @tablename+');' exec(@charsql); fetch next from mycursor into @dcsgroup,@mc,@dw,@tablename,@columnname end close mycursor if(@dcsgroupinfo is not null and @dcsgroupinfo != '' and (@dcsmcinfo is null or @dcsmcinfo = ''))--取一整個模組的資料 --查詢結果集 select distinct total.dcsgroup,total.mc,total.dw,##dcs_tablevalue.value,##dcs_tablevalue.tablename,##dcs_tablevalue.columnname from ##dcs_tablevalue left join ( select a.dcsgroup,a.mc,a.dw,b.tablename,a.columnname from dcsdata.dcsdatainf a left join dcsdata.dcsgroup b on a.dcsgroup = b.groupname )total on total.tablename = ##dcs_tablevalue.tablename and total.columnname = ##dcs_tablevalue.columnname where total.dcsgroup = @dcsgroupinfo else if (@dcsmcinfo = 'all')--取39個全廠概貌 --查詢結果集 select distinct total.dcsgroup,total.mc,total.dw,##dcs_tablevalue.value,##dcs_tablevalue.tablename,##dcs_tablevalue.columnname from ##dcs_tablevalue left join ( select a.dcsgroup,a.mc,a.dw,b.tablename,a.columnname from dcsdata.dcsdatainf a left join dcsdata.dcsgroup b on a.dcsgroup = b.groupname )total on total.tablename = ##dcs_tablevalue.tablename and total.columnname = ##dcs_tablevalue.columnname where mc in ('中壓蒸汽壓力','低壓蒸汽壓力','下段氣總管壓力','中段氣總管壓力','清洗氣總管壓力', '濾過真空度','迴圈水壓力','下段氣總流量','中段氣總流量','清洗氣總流量', '重鹼皮帶秤','真空淡液塔淡液流量','熱母液總管流量','蒸餾灰乳總流量','取出液總流量', '淡氨鹽水總流量','冷母液流量','碳化尾氣總管壓力','熱氨鹽水桶液位','冷氨鹽水桶液位', '中和水貯桶液位','1#熱母液液位','2#熱母液液位','1#冷母液桶液位','2#冷母液桶液位', 'I組中和水溫度','II組中和水溫度','III組中和水溫度','濾過吹風壓力','迴圈水溫度', '冷凍水溫度','氨鹽水總管溫度','重鹼精鹽水總流量','氨氣總管溫度','精鹽水溫度', '淡液塔中部溫度','去鹽水迴圈水溫度','濾過洗水溫度','濾鹼機總洗水流量') and dcsgroup in ('重鹼碳濾DCS','煅燒DCS') else if(@dcsgroupinfo is null or @dcsgroupinfo = '')--取所有資料 --查詢結果集 select distinct total.dcsgroup,total.mc,total.dw,##dcs_tablevalue.value,##dcs_tablevalue.tablename,##dcs_tablevalue.columnname from ##dcs_tablevalue left join ( select a.dcsgroup,a.mc,a.dw,b.tablename,a.columnname from dcsdata.dcsdatainf a left join dcsdata.dcsgroup b on a.dcsgroup = b.groupname )total on total.tablename = ##dcs_tablevalue.tablename and total.columnname = ##dcs_tablevalue.columnname else--取相關模組相關子模組的資料 --查詢結果集 select distinct total.dcsgroup,total.mc,total.dw,##dcs_tablevalue.value,##dcs_tablevalue.tablename,##dcs_tablevalue.columnname from ##dcs_tablevalue left join ( select a.dcsgroup,a.mc,a.dw,b.tablename,a.columnname from dcsdata.dcsdatainf a left join dcsdata.dcsgroup b on a.dcsgroup = b.groupname )total on total.tablename = ##dcs_tablevalue.tablename and total.columnname = ##dcs_tablevalue.columnname where total.dcsgroup = @dcsgroupinfo and total.mc like @dcsmcinfo END --執行儲存過程