SQL Server里函数的两种用法(可以代替游标)

 更新时间:2016年11月25日 16:42  点击:1312
SQL Server里函数的两种用法(可以代替游标)
1. 因为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(0.0)
END
SELECT @TASKID=TASKID,@PERCENT=ISNULL(WORKPERCENT,0)/100
FROM TABLETASKPHASE
WHERE ID=@TASKPHASEID
SELECT @HOUR=ISNULL(TASKTIME,0) 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,0)*ISNULL(FMERATE,0)*ISNULL(B.BASFAILURERATE,0)*[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,0)) FROM TABLEFMECA WHERE ROID=@ROID
UPDATE TABLERELATION
SET CRITICALITY=@CA
WHERE ID=@ROID
END
GO
2. 我们要根据某表的某些记录,先计算后求和,因为无法存储中间值,平时我们也用游标的方法进行计算。但sqlserver2000里支持
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
cube操作符
要使用cube,首先要了解group by
其实cube和rollup区别不太大,只是在基于group by 子句创建和汇总分组的可能的组合上有一定差别,
cube将返回的更多的可能组合。如果在 group by 子句中有n个列或者是有n个表达式的话,
sqlserver在结果集上会返回2的n-1次幂个可能组合。
注意:
使用cube操作符时,最多可以有10个分组表达式
在cube中不能使用all关键字
例子:
我们在数据库统计中常常要查询以下情况:
如一个定单数据库,我们要知道每个定单的每个产品数量,每个定单的所有产品数量,所有定单的某一产品数量,所有定单所有产品总量这些汇总信息。这时使用cube就十分方便了。当然不需要这么多信息或者只想知道某一具体产品、具体某一定单,某一时间关系(前,后,之间)等等具体信息的话,只需在where中限定即可
先举一个例子,是所有情况的:
一个数据库表中记载了一个产品定购情况:
现共有三种产品(1,2,3),已经下了两个定单(1,2)
sql语句:
select productid,orderid SUM(quantity) AS total FROM order GROUP BY productid,orderid WITH CUBE
ORDER BY productid,orderid
运行后得到结果:
productid orderid total
null null 95 所有定单所有产品总量
null 1 30 定单1所有产品数量
null 2 65 定单2所有产品数量
1 null 15 所有定单产品1总量
1 1 5 定单1产品1数量
1 2 10 定单2产品1数量
2 null 35 所有定单产品2总量
2 1 10 定单1产品2数量
2 2 25 定单2产品2数量
3 null 45 所有定单产品3总量
3 1 15 定单1产品3数量
3 2 30 定单2产品3数量
如果您对sqlserver group by 聚集有一定理解的话,您就可以理解cube操作符的用法和作用。其实在现实运用中cube还是很好有的,我们经常要对一些数据库数据进行统计,以利于我们更好的掌握情况
我想电子商务可以更好的实现合理配置资源,尽量减少库存,只有更好的掌握生产、销售数据的具体情况,才能实现资源的合理配置。希望以后的企业象dell一样,不要象长虹等彩电厂商。


SQL服务器内存有两种基本管理方法:动态分配和静态分配
控制程序可使用的内存数量。动态分配允许管理员声明一块内存的大小;考虑到它的实际使用,SQL服务器可以分配给其需要占用的内存的最大值,并且(理论上)在没有使用内存的情况下将其释放。静态分配则是创建一块固定的内存空间,提供给SQL Server使用——不再进行分配。
  
  在默认情况下,SQL Server被设置成动态分配,分配给其正在运行的计算机内所有可用的物理内存。许多管理员注意到SQL Server内存随时间的流逝被逐渐消耗殆尽时,其原因很可能是故障或是内存漏洞,但这个程序正是被设计成这样的。SQL Server就是要在任何可能的情况下在电脑中运行,并因此为达到其最佳性能而使用所有可用的内存。如果SQL Server在独立的机器中运行,那么就让它分配和释放其需要的内存吧。
  
  在一个小型商业服务器机器中,SQL可能与其他程序,如IIS,同时运行,管理员或许尝试着进行设置,使SQL Server运行在一块固定大小的内存,目的是控制其不会占用用于共享的内存。但这并不一定能如愿以偿。一方面,将内存的最高限度设置得太低,并且没有分配给SQL服务器足够的可用内存来用作类似事务日志或查询执行的缓存,所有这些都很难办到。使SQL服务器得到执行操作所需内存的惟一方法就是换出其他的页面,这是个缓慢的过程。
  
  有许多方法可以计算出最好的内存分配。如果你有可预知的用户负载,依照用户所需的最大数目分配给他们。微软推荐至少用4 MB用作动态的最大空间,这已经成为一个可能的规则。如果你的用户负载变化范围很大——如以下情况,当你通过IIS 的前端连接到公共的因特网来支持你的数据库服务的时候——实时的统计数据将会比仅凭猜测所作的工作帮助更大。在高峰期,把SQL Server的高速缓存命中率和每秒缺页率等性能数字搜集起来。如果这些数据表明SQL Server正在做大量的交换,那么增加最大内存空间直到交换逐渐减少。每秒一次或更多次的交换是有坏处的。
  
  另一种选择是使“为SQL Server预留物理内存”的选项可用,这可以防止SQL Server把已经分配给它的内存换出,即使当其他应用程序能够使用它时。这可以叫做是一把双刃剑:它既可以相当大程度的提高性能,也可能带来更大的性能损害。在有许多RAM 可以共享的(1 GB 或更多)的系统中,这是值得一试的,但是当有其他关键的进程可能突然需要大量的内存时,这种办法是不应该使用的。(并且如果需要的话,SQL Server可能会被迫放弃一些它自己的内存)。如果SQL Server是在独立的机器上运行,用这种办法最佳化性能则是值得的。


在本次讲座中,我们将首先介绍数据库设计的基本方法,并附上了一个设计MS-SQL Server数据库的例子。然后以Delphi5为开发工具,标准的paradox表为后台数据库,来向大家介绍如何进行最简单的数据库编程。
  在本例中,我们将实现对一个数据表单的添加、修改、删除以及对表中数据进行查询的功能。本例所使用的计算机软硬件环境为:Windows NT 4.0 Server,MS-SQL Server7.0,Borland Delphi 5,PIII550,256M内存。当然啦,一般的朋友在Win98的环境下或者Win2000的环境下都可以按照本例的步骤来编程序的。笔者的机器主要用作服务器,所以就在服务器上编啦。废话少说,现在开始:
一、数据库设计的基本方法
  数据库设计是建立数据库及其应用系统的核心和基础,它要求对于指定的应用环境,构造出较优的数据库模式,建立起数据库应用系统,并使系统能有效地存储数据,满足用户的各种应用需求。一般按照规范化的设计方法,常将数据库设计分为若干阶段……
二、MS-SQL Server数据库设计示例
  下面,笔者还为各位网友准备了一套数据库大餐,这就是在MS-SQL Server下的Client/Server结构编程示例……
三、数据库编程示例
  在本次讲座中,我们以Delphi5为开发工具,标准的paradox表为后台数据库,来向大家介绍如何进行最简单的数据库编程。在本例中,我们将实现对一个数据表单的添加、修改、删除以及对表中数据进行查询的功能……
四、大型数据库设计原则
  一个好的数据库产品不等于就有一个好的应用系统,如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能。一般来讲,在一个MIS系统分析、设计、测试和试运行阶段,因为数据量较小,设计人员和测试人员往往只注意到功能的实现,而很难注意到性能的薄弱之处,等到系统投入实际运行一段时间后,才发现系统的性能在降低……

作者:思索 整理:南海
什么是数据库系统?
  是一个实际可运行的存储、维护和应用系统提供数据的软件系统,是存储介质、处理对象和管理系统的集合体。它通常由软件、数据库和数据管理员组成。其软件主要包括操作系统、各种宿主语言,实用程序以及数据库管理系统。数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这些数据为多个应用服务,独立于具体的应用程序。数据库由数据库管理系统统一管理,数据的插入、修改和检索均要通过数据库管理系统进行。数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问数据库中任意部分数据。对数据库的维护包括保持数据的完整性、一致性和安全性。数据管理员负责创建、监控和维护整个数据库,使数据能被任何有权使用的人有效使用。数据库管理员一般是由业务水平较高、资历较深的人员担任。
  数据库系统的个体含义是指一个具体的数据库管理系统软件和用它建立起来的数据库;它的学科含义是指研究、开发、建立、维护和应用数据库系统所涉及的理论、方法、技术所构成的学科。在这一含义下,数据库系统是软件研究领域的一个重要分支,常称为数据库领域。
  数据库研究跨越于计算机应用、系统软件和理论三个领域,其中应用促进新系统的研制开发,新系统带来新的理论研究,而理论研究又对前两个领域起着指导作用。数据库系统的出现是计算机应用的一个里程碑,它使得计算机应用从以科学计算为主转向以数据处理为主,并从而使计算机得以在各行各业乃至家庭普遍使用。在它之前的文件系统虽然也能处理持久数据,但是文件系统不提供对任意部分数据的快速访问,而这对数据量不断增大的应用来说是至关重要的。为了实现对任意部分数据的快速访问,就要研究许多优化技术。这些优化技术往往很复杂,是普通用户难以实现的,所以就由系统软件(数据库管理系统)来完成,而提供给用户的是简单易用的数据库语言。由于对数据库的操作都由数据库管理系统完成,所以数据库就可以独立于具体的应用程序而存在,从而数据库又可以为多个用户所共享。因此,数据的独立性和共享性是数据库系统的重要特征。数据共享节省了大量人力物力,为数据库系统的广泛应用奠定了基础。数据库系统的出现使得普通用户能够方便地将日常数据存入计算机并在需要的时候快速访问它们,从而使的计算机走出科研机构进入各行各业、进入家庭。

[!--infotagslink--]

相关文章

  • php正确禁用eval函数与误区介绍

    eval函数在php中是一个函数并不是系统组件函数,我们在php.ini中的disable_functions是无法禁止它的,因这他不是一个php_function哦。 eval()针对php安全来说具有很...2016-11-25
  • php中eval()函数操作数组的方法

    在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
  • Python astype(np.float)函数使用方法解析

    这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08
  • Python中的imread()函数用法说明

    这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
  • C# 中如何取绝对值函数

    本文主要介绍了C# 中取绝对值的函数。具有很好的参考价值。下面跟着小编一起来看下吧...2020-06-25
  • C#学习笔记- 随机函数Random()的用法详解

    下面小编就为大家带来一篇C#学习笔记- 随机函数Random()的用法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#中using的三种用法

    using 指令有两个用途: 允许在命名空间中使用类型,以便您不必限定在该命名空间中使用的类型。 为命名空间创建别名。 using 关键字还用来创建 using 语句 定义一个范围,将在此...2020-06-25
  • 金额阿拉伯数字转换为中文的自定义函数

    CREATE FUNCTION ChangeBigSmall (@ChangeMoney money) RETURNS VarChar(100) AS BEGIN Declare @String1 char(20) Declare @String2 char...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • C++中 Sort函数详细解析

    这篇文章主要介绍了C++中Sort函数详细解析,sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变...2022-08-18
  • PHP用strstr()函数阻止垃圾评论(通过判断a标记)

    strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。语法:strstr(string,search)参数string,必需。规定被搜索的字符串。 参数sea...2013-10-04
  • PHP函数分享之curl方式取得数据、模拟登陆、POST数据

    废话不多说直接上代码复制代码 代码如下:/********************** curl 系列 ***********************///直接通过curl方式取得数据(包含POST、HEADER等)/* * $url: 如果非数组,则为http;如是数组,则为https * $header:...2014-06-07
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • C语言中free函数的使用详解

    free函数是释放之前某一次malloc函数申请的空间,而且只是释放空间,并不改变指针的值。下面我们就来详细探讨下...2020-04-25
  • PHP函数strip_tags的一个bug浅析

    PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数...2014-05-31
  • SQL Server中row_number函数的常见用法示例详解

    这篇文章主要给大家介绍了关于SQL Server中row_number函数的常见用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-12-08
  • PHP加密解密函数详解

    分享一个PHP加密解密的函数,此函数实现了对部分变量值的加密的功能。 加密代码如下: /* *功能:对字符串进行加密处理 *参数一:需要加密的内容 *参数二:密钥 */ function passport_encrypt($str,$key){ //加密函数 srand(...2015-10-30
  • php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    最近遇到一个问题,就是在使用php的mail函数发送utf-8编码的中文邮件时标题出现乱码现象,而邮件正文却是正确的。最初以为是页面编码的问题,发现页面编码utf-8没有问题啊,找了半天原因,最后找到了问题所在。 1.使用 PEAR 的...2015-10-21
  • C#中加载dll并调用其函数的实现方法

    下面小编就为大家带来一篇C#中加载dll并调用其函数的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • C#虚函数用法实例分析

    这篇文章主要介绍了C#虚函数用法,实例分析了C#中虚函数的功能与基本使用技巧,需要的朋友可以参考下...2020-06-25