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》
-----------------------------------------------------------------------------
参数:
   [email protected]   入井时间

返回值: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
时间: 2024-09-30 10:45:01

sql自定义函数及C#中调用的相关文章

SQL自定义函数split分隔字符串

SQL自定义函数split分隔字符串 一.F_Split:分割字符串拆分为数据表 Create FUNCTION [dbo].[F_Split] ( @SplitString nvarchar(max), --源字符串 @Separator nvarchar(10)=' ' --分隔符号,默认为空格 ) RETURNS @SplitStringsTable TABLE --输出的数据表 ( [id] int identity(1,1), [value] nvarchar(max) ) AS BE

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值

SQL自定义函数function

https://blog.csdn.net/qq_23833037/article/details/53170789 https://www.cnblogs.com/youring2/p/4916400.html 用户定义自定义函数像内置函数一样返回标量值,也可以将结果集用表格变量返回. sql函数必须有返回值. ps: 函数看成一个处理某些数据的功能,因有返回值,则在代码使用中,需要一个处理过的数据. 可直接调用函数处理数据,返回数据给代码使用. 标量函数:返回一个标量值. 表格值函数{内联表

PL/SQL自定义函数

从SQL表达式中调用函数的限制 为了从SQL表达式中调用函数,一个用户定义函数必须: 是存储函数 只接受IN函数 只接收有受的SQL数据类型,而不接受PL/SQL数据类型 返回数据类型为有效的SQL数据类型,而非PL/SQL特殊的类型 从SQL表达式中调用的函数不能包含DML语句 从在表T上的UPDATE/DELETE语句中调用的函数,函数内容不能包含在同一个表T上的DML 从在表T上的UPDATE或DELETE语句中调用的函数,函数内容不能查询同一个表 从SQL语句中调用的函数不能包含结束事物

sql 自定义函数--固定格式字符转时间类型

遇到一个德国的客户,他们的时间格式是JJJJ-TT-DD HH:MM:SS,程序按照这个格式将时间插入数据库,但是在sql自带的转换函数convert.cast过程中报错,网上搜了下都说用convert.cast可以直接转换,但是这个客户的机器就是不行,没有办法自己写了个转换函数,供大家参考: 由于自定义函数里面不能直接使用getdate方法:所以先创建了个获取本地时间的小函数: create view v_getdate as select getdate() as now_date 然后是转

sqlserver自定义函数的创建与调用

sqlserver中有系统提供的函数,像avg.sum.getdate()等,用户还可以自定义函数. 用户自定义的函数包括:标量函数和表值函数,其中标量函数和系统函数的用法一样,表值函数根据主体的定义方式又可分为内嵌函数和多语句函数. 下面一一介绍语法. 标量函数: 1 Create function 函数名(参数) 2 Returns 返回值数据类型 3 [with {Encryption | Schemabinding }] 4 [as] 5 begin 6 SQL语句(return变量)

MYSQL自定义函数实现表中递归层次的展现

1.现在以菜单表为例,在数据库中创建表test_menu. 2.在表中创建一些实例数据 现在的菜单层次为cd_1与cd_2为一级菜单,cd_1下分为cd_1_1与cd_1_2两个二级菜单,cd_1_1下有个三级菜单cd_1_1_1,目录结构如下 cd_1 cd_1_1 cd_1_1_1 cd_1_2 cd_2 3.创建自定义函数 4.查询菜单层次 在此,菜单的各层次就很清晰的展现出来了.

mysql自定义函数--得到字符串中最后一个分隔符前面的内容

工作中使用到一些特殊的字符串,比如'50-1-1-2-3',当需要得到'50-1-1-2'时可使用以下自定义函数 DELIMITER $$ USE `mydb`$$ DROP FUNCTION IF EXISTS `get_content_before_last_separator`$$ CREATE DEFINER=`root`@`%` FUNCTION `get_content_before_last_separator`(charStr VARCHAR(200),separatorStr 

自定义函数使字符串中的某个字符更改样式

设定现在有一个字符串 str = "hello, kitty is not cat": 假设要把其中的 is 变成红色样式: 先自定义一个函数 red(); red(str,redstr)函数传递两个参数,一个是整个字符串,另一个是要变样式的字符串. var str = "hello, kitty is not cat"; var red = (a, redstr = "参数默认") => { let zzr = new RegExp(&q