当前位置: 首页 > news >正文

sql自定义函数及C#中调用

1、在C#中调用sql自定义函数

1.1 标量值函数

sql语句调用 select  dbo.GetClassIDWithName(1)  

string strSql = string.Format("select dbo.GetClassIDWithName('{0}')",dtTime);
DataTable dt = DB_Contrast.DB.OleDbHelper.GetDataTable(strSql);

1.2 表值函数

sql语句调用 select * from GetAnalysis('2015-1-15',1) 

string strSql = string.Format("select * from dbo.GetAnalysis('{0}',{1}) where 部门='{2}' ",dtTime, classid,"开发");
DataSet ds = DB_Contrast.DB.OleDbHelper.GetDataSet(strSql);

2、表值函数,

内层select获取不重复的记录

外层按照部门进行分组

USE [BW_Contrast]
GO
/****** Object:  UserDefinedFunction [dbo].[GetAnalysis]    Script Date: 01/15/2015 13:09:17 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetAnalysis]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetAnalysis]
GO

/****** Object:  UserDefinedFunction [dbo].[GetAnalysis]    Script Date: 01/15/2015 13:09:17 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
   /*
   -----------------------------------------------------------------------------
  《根据入井时间获取相应的班次ID》
   -----------------------------------------------------------------------------
   参数:
   1、@classdate   班次日期

        2、@classid 班次ID

         返回值:table
   -----------------------------------------------------------------------------
   Written by 
   -----------------------------------------------------------------------------
   */

CREATE function [dbo].[GetAnalysis](@classdate datetime,@classid int)
returns table as 
  return (
--declare @classdate datetime,@classid int
--set @classid=2
--set @classdate='2015-1-14'
select 
    case when(grouping(a.部门)=1) then '合计' else a.部门 end as 部门
   ,(select top 1 ID from dbo.v_Dept where 部门名称=a.部门) as deptid
   ,Sum(case when dt_RealTime is not null and myclassid=@classid  then 1 else 0 end ) as  派班人数
   ,Sum(case when dt_GetTime is not null and myclassid=@classid  then 1 else 0 end ) as  领灯人数
   ,Sum(case when dtInWellTime is not null and myclassid=@classid  then 1 else 0 end ) as  下井人数
   ,Sum(case when dt_OutWellTime is not null and myclassid=@classid  then 1 else 0 end ) as  上井人数
   ,Sum(case when dt_ReturnTime is not null and myclassid=@classid  then 1 else 0 end ) as  还灯人数
 from
(
    select 
        部门,deptid,myclassdate,myclassid,mypersonid
        ,min(dt_RealTime) as  dt_RealTime
        ,min(dt_GetTime) as dt_GetTime
        ,min(dtInWellTime) as dtInWellTime
        ,min(dt_OutWellTime) as dt_OutWellTime
        ,min(dt_ReturnTime) as dt_ReturnTime
    from v_ALL_NEW
    where myclassdate=@classdate and myclassid=@classid
    group by 部门,myclassdate,myclassid,mypersonid,deptid
)a    
where  myclassdate=@classdate and myclassid=@classid and 部门 is not null 
group by 部门
with rollup
)

GO

 

3、标量值函数

USE [BW_Contrast]
GO

/****** Object:  UserDefinedFunction [dbo].[GetClassIDWithName]    Script Date: 01/15/2015 14:31:39 ******/
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetClassIDWithName]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
DROP FUNCTION [dbo].[GetClassIDWithName]
GO

USE [BW_Contrast]
GO

/****** Object:  UserDefinedFunction [dbo].[GetClassIDWithName]    Script Date: 01/15/2015 14:31:39 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

/*
-----------------------------------------------------------------------------
                              《根据入井时间获取相应的班次ID》
-----------------------------------------------------------------------------
参数:
   1.@InWellTime   入井时间

返回值:int型 班次ID
-----------------------------------------------------------------------------
                                 Written by 
-----------------------------------------------------------------------------
*/
create    function [dbo].[GetClassIDWithName](@InWellTime varchar(50))
returns int as
begin
  declare @returnValue int
  set @returnValue=0 
   select @returnValue=classID from v_Class where 时间段名称 =@InWellTime
  return @returnValue
end 

GO

 

转载于:https://www.cnblogs.com/xiaochun126/p/4226296.html

相关文章:

  • json-lib codehuas copyright
  • 周记 2015.1.17
  • UGUI自适应
  • read 系统调用剖析
  • Android系统之Broadcom GPS 移植
  • 寒假汇编语言作业(4)
  • 使用jni接口完成android本地程序的运行--具体的操作
  • java和c的本质--最重要的是启动
  • 脑子放放电
  • 关于ProjectServer定制化项目中心页面
  • c没有main函数/java没有main方法--语言运行的实质之实例
  • 深有体会内存对系统性能的重要性
  • 判断括号的匹配性的一种算法
  • 焦点图下面的索引小圆环
  • java虚拟机的启动实例--eclipse的方式
  • 【刷算法】求1+2+3+...+n
  • canvas 绘制双线技巧
  • CentOS 7 修改主机名
  • laravel 用artisan创建自己的模板
  • Mac转Windows的拯救指南
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 分布式事物理论与实践
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 高程读书笔记 第六章 面向对象程序设计
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 前言-如何学习区块链
  • 浅析微信支付:申请退款、退款回调接口、查询退款
  • 译自由幺半群
  • Hibernate主键生成策略及选择
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • #Linux(make工具和makefile文件以及makefile语法)
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #pragma data_seg 共享数据区(转)
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (2)STL算法之元素计数
  • (2015)JS ES6 必知的十个 特性
  • (NSDate) 时间 (time )比较
  • (接口自动化)Python3操作MySQL数据库
  • (三)uboot源码分析
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)程序员疫苗:代码注入
  • (转载)深入super,看Python如何解决钻石继承难题
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • *2 echo、printf、mkdir命令的应用
  • .net 8 发布了,试下微软最近强推的MAUI
  • .net core 6 集成和使用 mongodb
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Micro Framework初体验(二)
  • .net 后台导出excel ,word
  • .Net的DataSet直接与SQL2005交互
  • .net反编译的九款神器
  • /var/lib/dpkg/lock 锁定问题
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法