通过嵌套,根据表中记录的表名与列名到指定位置取值。

--声明存储过程   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
--执行存储过程

Sqlserver 游标&存储过程&临时表混合使用实例的更多相关文章

  1. 查询Table name, Column name, 拼接执行sql文本, 游标, 存储过程, 临时表

    018_Proc_UpdateTranslations.sql: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO if (exists (select ...

  2. T-SQL应用,视图、存储过程、触发器、游标、临时表等

    sqlserver常用操作: 视图.存储过程.触发器.函数 --*********************批处理********************* --[在一个批处理中存有一个语法错误,则所有 ...

  3. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  4. Sqlserver中存储过程,触发器,自定义函数(一)

    Sqlserver中存储过程,触发器,自定义函数 1.存储过程有关内容存储过程的定义:存储过程的分类:存储过程的创建,修改,执行:存储过程中参数的传递,返回与接收:存储过程的返回值:存储过程使用游标. ...

  5. SQLServer 的存储过程与java交互

    一.   存储过程简介 Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量.条件执行和其他强大的编程 ...

  6. Sqlserver中存储过程,触发器,自定义函数

    Sqlserver中存储过程,触发器,自定义函数: 1. 触发器:是针对数据库表或数据库的特殊存储过程,在某些行为发生的时候就会被激活 触发器的分类: DML触发器:发生在数据操作语言执行时触发执行的 ...

  7. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

  8. SQLServer 中存储过程

    SQLServer 中存储过程返回的三种方式( 包括存储过程的创建, 在存储过程中调用, 在VS中调用的方法)存储过程有三种返回:   1.   用return返回数字型数据   2.   用返回参数 ...

  9. Sqlserver中存储过程,触发器,自定义函数(二)

    Sqlserver中存储过程,触发器,自定义函数: 自定义函数:1.函数类型:2.函数的参数和返回值: 1.函数类型:标量值函数,返回的是一个标量值表值函数:内联表值函数:多语句表值函数. 标量值函数 ...

随机推荐

  1. normalize.css源码解析

    什么是normalize.css?  它是为了帮助我们统一各个浏览器的样式和消除bug的css库. 为什么需要normalize.css,有什么好处? 不像一些reset.css,normalize. ...

  2. ruby **option作为函数参数,map的key必须是符号

    # NEW UNNAMED KEYWORD ARGUMENTSdef new_way(**options)return options[:foo]end# => :new_waynew_way( ...

  3. 通过面试题,让我们来了解Collection

    前言 欢迎关注公众号:Coder编程 获取最新原创技术文章和相关免费学习资料,随时随地学习技术知识!** 本章主要介绍Collection集合相关知识,结合面试中会提到的相关问题进行知识点的梳理.希望 ...

  4. Java Servlet 缺点

    1.web.xml配置比较多 2.servlet具有容器依赖性(tomcat没有启动,就没有用)

  5. STIL文件(DFT/IC测试方向)

    相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...

  6. [作业] Python入门基础---九九乘法表

    1.while 循环 : x = 1 while x < 10: y = 1 while y <=x: print('%d*%d=%2d' % (y,x,x*y),end = '\t') ...

  7. springboot主从数据库

    是从springmvc的思路上来做的,主要就是配置主.从DataSource,再继承AbstractRoutingDataSource,重写determineCurrentLookupKey方法,通过 ...

  8. 【AngularJs】---JSONP跨域访问数据传输(JSON_CALLBACK)

    大家会自然想到只有一个字母之差的JSON吧~ JSON(JavaScript Object Notation)和JSONP(JSON with Padding)虽然只有一个字母的差别,但其实他们根本不 ...

  9. javascript图形动画设计--以简单正弦波轨迹移动

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. JS日期、月份的加减

    JS日期.月份的加减 需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1 // 日期,在原有日期基础上,增加days天数,默认增加1天 function ...