知识大全 SQL Server里函数的两种用法(可以代替游标)
Posted 函数
篇首语:家资是何物,积帙列梁梠。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 SQL Server里函数的两种用法(可以代替游标)相关的知识,希望对你有一定的参考价值。
SQL Server里函数的两种用法(可以代替游标) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
update里不能用存储过程 然而要根据更新表的某些字段还要进行计算 我们常常采用游标的方法 这里用函数的方法实现
函数部分
CREATE FUNCTION [DBO] [FUN_GETTIME] (@TASKPHASEID INT)
RETURNS FLOAT AS
BEGIN
DECLARE @TASKID INT
@HOUR FLOAT
@PERCENT FLOAT
@RETURN FLOAT
IF @TASKPHASEID IS NULL
BEGIN
RETURN( )
END
SELECT @TASKID=TASKID @PERCENT=ISNULL(WORKPERCENT )/
FROM TABLETASKPHASE
WHERE ID=@TASKPHASEID
SELECT @HOUR=ISNULL(TASKTIME ) FROM TABLETASK
WHERE ID=@TASKID
SET @RETURN=@HOUR*@PERCENT
RETURN (@RETURN)
END
调用函数的存储过程部分
CREATE PROCEDURE [DBO] [PROC_CALCCA]
@ROID INT
AS
BEGIN
DECLARE @CA FLOAT
UPDATE TABLEFMECA
SET
Cvalue_M= ISNULL(MODERATE )*ISNULL(FMERATE )*ISNULL(B BASFAILURERATE )*[DBO] [FUN_GETTIME](C ID)
FROM TABLEFMECA TABLERELATION B TABLETASKPHASE C
WHERE ROID=@ROID AND TASKPHASEID=C ID AND B ID=@ROID
SELECT @CA=SUM(ISNULL(Cvalue_M )) FROM TABLEFMECA WHERE ROID=@ROID
UPDATE TABLERELATION
SET CRITICALITY=@CA
WHERE ID=@ROID
END
GO
我们要根据某表的某些记录 先计算后求和 因为无法存储中间值 平时我们也用游标的方法进行计算 但sqlserver 里支持
SUM ( [ ALL | DISTINCT ] expression )
expression
是常量 列或函数 或者是算术 按位与字符串等运算符的任意组合 因此我们可以利用这一功能
函数部分
CREATE FUNCTION [DBO] [FUN_RATE] (@PARTID INT @ENID INT @SOURCEID INT @QUALITYID INT @COUNT INT)
RETURNS FLOAT AS
BEGIN
DECLARE @QXS FLOAT @G FLOAT @RATE FLOAT
IF (@ENID=NULL) OR (@PARTID=NULL) OR (@SOURCEID=NULL) OR (@QUALITYID=NULL)
BEGIN
RETURN( )
END
SELECT @QXS= ISNULL(XS ) FROM TABLEQUALITY WHERE ID=@QUALITYID
SELECT @G=ISNULL(FRATE_G ) FROM TABLEFAILURERATE
WHERE (SUBKINDID=@PARTID) AND( ENID=@ENID) AND ( DATASOURCEID=@SOURCEID) AND( ( (ISNULL(MINCOUNT )<=ISNULL(@COUNT )) AND ( ISNULL(MAXCOUNT )>=ISNULL(@COUNT )))
OR(ISNULL(@COUNT )>ISNULL(MAXCOUNT )))
SET @RATE=ISNULL(@QXS*@G )
RETURN (@RATE)
END
调用函数的存储过程部分
CREATE PROC PROC_FAULTRATE
@PARTID INTEGER @QUALITYID INTEGER @SOURCEID INTEGER @COUNT INTEGER @ROID INT @GRADE INT @RATE FLOAT= OUTPUTAS
BEGIN
DECLARE
@TASKID INT
SET @RATE=
SELECT @TASKID=ISNULL(TASKPROID ) FROM TABLERELATION WHERE ID=(SELECT PID FROM TABLERELATION WHERE ID=@ROID)
IF (@TASKID= ) OR(@GRADE= ) BEGIN
SET @RATE=
RETURN
END
SELECT @RATE=SUM([DBO] [FUN_RATE] (@PARTID ENID @SOURCEID @QUALITYID @COUNT) *ISNULL(WORKPERCENT )/ )
FROM TABLETASKPHASE
WHERE TASKID=@TASKID
END
GO
cha138/Article/program/SQLServer/201311/22538相关参考
SQLServer时间函数用法详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL中的时间
通过用static来定义方法或成员为我们编程提供了某种便利从某种程度上可以说它类似于C语言中的全局函数和全局变量 但是并不是说有了这种便利你便可以随处使用如果那样的话你便需要认真考虑一下自己是否
SQLSERVER其它函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本篇文章还是学习《程序
数据库人员手边系列:SQLServer基本函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 字
知识大全 SQL Server 7.0 函数及SQL语句相关问题
SQLServer7.0函数及SQL语句相关问题 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用SQLServer创建语言辅助函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在现在这样
知识大全 Sql Server 2005自定义Split函数
SqlServer2005自定义Split函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 要
如何模拟SQLServer的两个日期处理函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! //
SQLServer和Oracle的常用函数对比 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 数
在SQLServer数据库中拆分字符串函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! SQL