仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 680|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL编程:SQL Server里函数的两种用法(能够取代...

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:38:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MySQL在业界的流行所带来的另一个好处是,人们总可以很轻松地发现本行业的MySQL学习教程。厂商都希望他们的开发工具和应用程序框架可以与MySQL数据库兼容。server|函数|游标SQLServer里函数的两种用法(能够取代游标)
1.由于update里不克不及用存储历程,但是要依据更新表的某些字段还要举行盘算。我们经常接纳游标的办法,这里用函数的办法完成。
函数部分:
CREATEFUNCTION[DBO].[FUN_GETTIME](@TASKPHASEIDINT)
RETURNSFLOATAS
BEGIN
DECLARE@TASKIDINT,
@HOURFLOAT,
@PERCENTFLOAT,
@RETURNFLOAT
IF@TASKPHASEIDISNULL
BEGIN
RETURN(0.0)
END
SELECT@TASKID=TASKID,@PERCENT=ISNULL(WORKPERCENT,0)/100
FROMTABLETASKPHASE
WHEREID=@TASKPHASEID
SELECT@HOUR=ISNULL(TASKTIME,0)FROMTABLETASK
WHEREID=@TASKID
SET@RETURN=@HOUR*@PERCENT
RETURN(@RETURN)
END
挪用函数的存储历程部分
CREATEPROCEDURE[DBO].[PROC_CALCCA]
@ROIDINT
AS
BEGIN
DECLARE@CAFLOAT
UPDATETABLEFMECA
SET
Cvalue_M=ISNULL(MODERATE,0)*ISNULL(FMERATE,0)*ISNULL(B.BASFAILURERATE,0)*[DBO].[FUN_GETTIME](C.ID)
FROMTABLEFMECA,TABLERELATIONB,TABLETASKPHASEC
WHEREROID=@ROIDANDTASKPHASEID=C.IDANDB.ID=@ROID
SELECT@CA=SUM(ISNULL(Cvalue_M,0))FROMTABLEFMECAWHEREROID=@ROID
UPDATETABLERELATION
SETCRITICALITY=@CA
WHEREID=@ROID
END
GO
2.我们要依据某表的某些纪录,先盘算后乞降,由于没法存储两头值,平常我们也用游标的办法举行盘算。但sqlserver2000里撑持
SUM([ALL|DISTINCT]expression)
expression
是常量、列或函数,大概是算术、按位与字符串等运算符的恣意组合。因而我们能够使用这一功效。
函数部分:
CREATEFUNCTION[DBO].[FUN_RATE](@PARTIDINT,@ENIDINT,@SOURCEIDINT,@QUALITYIDINT,@COUNTINT)
RETURNSFLOATAS
BEGIN
DECLARE@QXSFLOAT,@GFLOAT,@RATEFLOAT
IF(@ENID=NULL)OR(@PARTID=NULL)OR(@SOURCEID=NULL)OR(@QUALITYID=NULL)
BEGIN
RETURN(0.0)
END
SELECT@QXS=ISNULL(XS,0)FROMTABLEQUALITYWHEREID=@QUALITYID
SELECT@G=ISNULL(FRATE_G,0)FROMTABLEFAILURERATE
WHERE(SUBKINDID=@PARTID)AND(ENID=@ENID)AND(DATASOURCEID=@SOURCEID)AND(((ISNULL(MINCOUNT,0)<=ISNULL(@COUNT,0))AND(ISNULL(MAXCOUNT,0)>=ISNULL(@COUNT,0)))
OR(ISNULL(@COUNT,0)>ISNULL(MAXCOUNT,0)))
SET@RATE=ISNULL(@QXS*@G,0)
RETURN(@RATE)
END
挪用函数的存储历程部分:
CREATEPROCPROC_FAULTRATE
@PARTIDINTEGER,@QUALITYIDINTEGER,@SOURCEIDINTEGER,@COUNTINTEGER,@ROIDINT,@GRADEINT,@RATEFLOAT=0OUTPUTAS
BEGIN
DECLARE
@TASKIDINT
SET@RATE=0.0
SELECT@TASKID=ISNULL(TASKPROID,-1)FROMTABLERELATIONWHEREID=(SELECTPIDFROMTABLERELATIONWHEREID=@ROID)
IF(@TASKID=-1)OR(@GRADE=1)BEGIN
SET@RATE=0
RETURN
END
SELECT@RATE=SUM([DBO].[FUN_RATE](@PARTID,ENID,@SOURCEID,@QUALITYID,@COUNT)*ISNULL(WORKPERCENT,0)/100.0)
FROMTABLETASKPHASE
WHERETASKID=@TASKID
END
GO
函数还能够前往表等,但愿人人一同会商sqlserver里函数的妙用。
使用DBaaS能让收入损失从其他业务上得到弥补,如软件更新和硬件管理。也许决定走DBaaS之路的客户可能会跳过解决方案提供商,尽管这个决策看起来有点短视。
蒙在股里 该用户已被删除
沙发
发表于 2015-1-19 19:41:38 | 只看该作者
财务软件要用SQL也只是后台的数据库而已,软件都是成品的,当然多学东西肯定是有好处的..
admin 该用户已被删除
板凳
发表于 2015-1-28 10:01:49 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
透明 该用户已被删除
地板
发表于 2015-2-5 20:26:39 | 只看该作者
大家注意一点。如下面的例子:
小女巫 该用户已被删除
5#
发表于 2015-2-13 13:10:51 | 只看该作者
比如,MicrosoftSQLServer2008的某一个版本可以满足现在的这个业务的需要,而且价格还比Oracle11g要便宜,那么这一产品就是适合的。
第二个灵魂 该用户已被删除
6#
发表于 2015-3-3 21:44:44 | 只看该作者
对一张百万级别的表建游标,同时又没有什么过滤条件,取得游标效率是如果直接SQL查询百万条数据;如果再对每条记录做处理,耗时将更长。
海妖 该用户已被删除
7#
发表于 2015-3-11 14:00:31 | 只看该作者
作了些试验,发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重的系统性能问题!
莫相离 该用户已被删除
8#
发表于 2015-3-18 22:06:25 | 只看该作者
发几份SQL课件,以飨阅者
谁可相欹 该用户已被删除
9#
发表于 2015-3-26 19:11:52 | 只看该作者
如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个SQL语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-4-29 16:06

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表