仓酷云

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

[学习教程] MSSQL编程:用户自界说函数

[复制链接]
简单生活 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:19:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
在JOIN操作中(需要从多个数据表提取数据时),MySQL只有在主键和外键的数据类型相同时才能使用索引。除利用体系供应的函数外,用户还能够依据必要自界说函数。用户自界说函数(UserDefinedFunctions)是SQLServer2000新增的数据库工具,是SQLServer的一年夜改善。
用户自界说函数不克不及用于实行一系列改动数据库形态的操纵,但它能够像体系函数一样在查询或存储历程等的程序段中利用,也能够像存储历程一样经由过程EXECUTE命令来实行。用户自界说函数中存储了一个Transact-SQL例程,能够前往必定的值。
在SQLServer2000中依据函数前往值情势的分歧将用户自界说函数分为三品种型:

  • 标量型函数(Scalarfunctions)
    标量型函数前往一个断定范例的标量值其前往值范例为除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE范例外的别的数据范例。函数体语句界说在BEGIN-END语句内,个中包括了能够前往值的Transact-SQL命令。
  • 内联表值型函数(Inlinetable-valuedfunctions)
    内联表值型函数以表的情势前往一个前往值,即它前往的是一个表内联表值型函数没有由BEGIN-END语句括起来的函数体。其前往的表由一个位于RETURN子句中的SELECT命令段从数据库中选择出来。内联表值型函数功效相称于一个参数化的视图。
  • 多声明表值型函数(Multi-statementtable-valuedfunctions)
    多声明表值型函数能够看做标量型和内联表值型函数的分离体。它的前往值是一个表,但它和标量型函数一样有一个用BEGIN-END语句括起来的函数体,前往值的表中的数据是由函数体中的语句拔出的。因而可知,它能够举行屡次查询,对数据举行屡次选择
    与兼并,填补了内联表值型函数的不敷。
<P>13.13.1创立用户自界说函数
SQLServer2000为三品种型的用户自界说函数供应了分歧的命令创立格局。
(1)创立标量型用户自界说函数(Scalarfunctions)其语法以下:


各参数申明以下:

  • owner_name
    指定用户自界说函数的一切者。
  • function_name
    指定用户自界说函数的称号。database_name.owner_name.function_name应是唯一的。
  • @parameter_name
    界说一个或多个参数的称号。一个函数最多能够界说1024个参数每一个参数前用“@”标记标明。参数的感化局限是全部函数。参数只能替换常量,不克不及替换表名、列名或别的数据库工具的称号。用户自界说函数不撑持输入参数。
  • scalar_parameter_data_type
    指定标量型参数的数据范例,能够为除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE范例外的别的数据范例。
  • scalar_return_data_type
    指定标量型前往值的数据范例,能够为除TEXT、NTEXT、IMAGE、CURSOR、TIMESTAMP和TABLE范例外的别的数据范例。
  • scalar_expression
    指定标量型用户自界说函数前往的标量值表达式。
  • function_body
    指定一系列的Transact-SQL语句,它们决意了函数的前往值。
  • ENCRYPTION
    加密选项。让SQLServer对体系表中有关CREATEFUNCTION的声明加密,以避免用户自界说函数作为SQLServer复制的一部分被公布(Publish)。
  • SCHEMABINDING
    企图绑定选项将用户自界说函数绑定到它所援用的数据库工具假如指定了此选项,则函数所触及的数据库工具今后将不克不及被删除或修正,除非函数被删除或往失落此选项。应注重的是,要绑定的数据库工具必需与函数在统一数据库中。


(2)创立内联表值型用户自界说函数(InlineTable-valuedFunctions)
其语法以下:


各参数申明以下:
(3)创立多声明表值型用户自界说函数
其语法以下:

各参数申明以下:<P>

  • @return_variable
    一个TABLE范例的变量,用于存储和积累前往的表中的数据行。
  • 其他参数与标量型用户自界说函数不异。
    在多声明表值型用户自界说函数的函数体中同意利用以下Transact-SQL语句。
  • 赋值语句(Assignmentstatements);
  • 流程把持语句(Control-of-Flowstatements);
  • 界说感化局限在函数内的变量和游标的DECLARE语句;
  • SELECT语句;
  • 编纂函数中界说的表变量的INSERT、UPDATE和DELETE语句;
  • 在函数中同意触及诸如声明游标、翻开游标、封闭游标、开释游标如许的游标操纵,关于读取游标而言,除非在FETCH语句中利用INTO从句来对某一变量赋值,不然不同意在函数中利用FETCH语句来向客户端前往数据。
????????????????别的不断定性函数(Non-deterministicfunctions)不克不及在用户自界说函数中利用。所谓不断定性函数是指那些利用不异的挪用参数在分歧时候挪用失掉的前往值分歧的函数。这些函数如表13-3所示(全局变量也能够视为一种函数)。




(4)用EnterpriseManager创立用户自界说函数
用EnterpriseManager创立用户自界说函数的办法是:在EnterpriseManager当选摘要创立用户自界说函数的数据库。在数据库工具“UserDefinedFunctions”上单击右键,从入手下手菜单当选择“NewUserDefinedFunction”选项,就会呈现如3-4所示的界说用户自界说函数属性对话框。能够在个中指定要界说的函数的称号,并编纂函数的剧本。单击“OK”按钮,则增加用户自界说函数工具到数据库中。

3-4界说用户自界说函数属性对话框

13.13.2修正和删除用户自界说函数
在EnterpriseManager当选摘要举行修改的用户自界说函数,单击右键从快速菜单当选择“属性”选项,则会呈现与3-4相似的修正用户自界说函数布局对话框。能够修正用户自界说函数的函数体、参数等。从快速菜单当选择“删除”选项,则可删除用户自界说函数。
用ALTERFUNCTION命令也能够修正用户自界说函数。此命令的语法与CREATEFUNCTION不异,因而利用ALTERFUNCTION命令实在相称于重修了一个同名的函数,用起来不小气便。
别的,能够用DROPFUNCTION命令删除用户自界说函数,其语法以下:
DROPFUNCTION{[owner_name.]function_name}[,...n]
例13-22:删除用户自界说函数chiefinfo
dropfunctionchiefinfo

本章小结
本章次要先容了SQLServer中极其主要的两个观点:游标和视图,游标最为凸起的奉献在于实在现了对了局的行操纵,从而能够在使用程序中对统一了局集施加分歧的数据操纵,在面向汇合的数据库办理体系和面向行的程序计划二者之间架起了“相同”的桥梁,完成了两个数据处置体例的自在交换。视图作为一个查询了局集固然仍与表具有类似的布局,但它是一张虚表,以视图布局显现在用户眼前的数据并非以视图的布局存储在数据库中,而是存储在视图所援用的基础表傍边。视图的存在为保证数据库的平安性供应了老手段。除此以外,读者从本章中也能够懂得到SQLServer2000新增的“用户自界说函数”的创立和利用。2008年1月16号MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。
飘灵儿 该用户已被删除
沙发
发表于 2015-1-18 17:26:18 | 只看该作者
从底层原理到表层引用,书籍多的很。个人认为没有什么那本书好?这样的说法。主要看和个人的学习方法是否适合。
精灵巫婆 该用户已被删除
板凳
发表于 2015-1-22 18:08:34 | 只看该作者
只能告诉你,学好数据库语言和原理,多见识几种数据库软件,比一棵树上吊死要好。
透明 该用户已被删除
地板
发表于 2015-1-31 10:34:21 | 只看该作者
其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQLServer2005的row_number比Oracle的更先进。因为它把Orderby集成到了一起,不用像Oracle那样还要用子查询进行封装。
5#
发表于 2015-2-6 19:00:06 | 只看该作者
是要和操作系统进行Socket通讯的场景。否则建议慎重!
若天明 该用户已被删除
6#
发表于 2015-2-18 08:42:32 | 只看该作者
但换公司用MSSQL2K感觉自己好像根本就不了解MSSQL。什么DTS触发器以前根本没用过。
变相怪杰 该用户已被删除
7#
发表于 2015-3-6 02:41:05 | 只看该作者
其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!
兰色精灵 该用户已被删除
8#
发表于 2015-3-20 02:09:31 | 只看该作者
一个百万级别的基本信息表A,一个百万级别的详细记录表B,A中有个身份证id,B中也有身份id;先要找出A中在B的详细记录。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-3-13 07:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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