SqlCollections - 用户定义数据类型和函数

  1 --==============================用户定义数据类型和函数===============================
  2 --用户定义数据类型
  3 EXEC sp_addtype 说明,‘nvarchar(500)‘,‘null‘
  4
  5 --删除用户定义数据类型
  6 DROP TYPE 说明
  7 --OR:
  8 EXEC sp_droptype 说明
  9
 10 --标量值函数
 11 --目标:返回某年份的订单总金额
 12 CREATE FUNCTION 订单总额(@year int)
 13 RETURNS money    --RETURNS + 返回值类型
 14 BEGIN
 15     DECLARE @total money
 16     SELECT @total = SUM(b.单价*b.数量*(1-b.折扣))
 17     FROM 订单 a
 18     JOIN 订单明细 b
 19     ON a.订单ID = b.订单ID
 20     WHERE YEAR(订购日期) = @year
 21     GROUP BY YEAR(订购日期)
 22
 23     RETURN @total;
 24 END
 25 GO
 26 --注意Schema不能丢
 27 PRINT ‘1998年的订单总额为:‘+CONVERT(nvarchar(10),dbo.订单总额(1998))
 28
 29 --内联表值函数
 30 --目标:显示某时间段内的订单
 31 CREATE FUNCTION 时间段订单(@beginDate datetime,@endDate datetime)
 32 RETURNS TABLE
 33 RETURN SELECT * FROM 订单 WHERE 订购日期 BETWEEN @beginDate AND @endDate
 34 GO
 35 SELECT * FROM 时间段订单(‘1996-7-1‘,‘1999-05-30‘)
 36
 37 --多语句表值函数
 38 --目标:显示全部的人员,包括供应商、客户、运货商、雇员
 39 CREATE FUNCTION 全部人员()    --就算没有参数,括号也不能少
 40 RETURNS @名单 TABLE
 41     (
 42         编号 int IDENTITY(1,1) NOT NULL Primary key,
 43         姓名 nvarchar(30) NOT NULL,
 44         地址 nvarchar(500) NULL,
 45         邮编 varchar(20) NULL,
 46         电话 varchar(20) NULL,
 47         类别 nvarchar(10) NOT NULL
 48     )
 49 BEGIN
 50     INSERT INTO @名单
 51     SELECT 联系人姓名,地址,邮政编码,电话,‘供应商‘ FROM 供应商
 52
 53     INSERT INTO @名单
 54     SELECT 联系人姓名,地址,邮政编码,电话,‘客户‘ FROM 客户
 55
 56     INSERT INTO @名单
 57     SELECT 公司名称,NULL,NULL,电话,‘运货商‘ FROM 运货商
 58
 59     INSERT INTO @名单
 60     SELECT 姓氏+名字,地址,邮政编码,家庭电话+‘-‘+分机,‘雇员‘ FROM 雇员
 61
 62     RETURN
 63 END
 64 GO
 65 SELECT * FROM 全部人员()
 66
 67
 68 select 雇员ID from 订单
 69 WHERE YEAR(订购日期) = 1998
 70 group by 雇员ID
 71 ORDER BY COUNT(订单ID) DESC
 72
 73 select * from 订单
 74 WHERE YEAR(订购日期) = 1998
 75 and 雇员ID = 5
 76
 77 --用户定义函数也可以用来设置默认值、约束、计算列等
 78 --目标:新建一个表,将编号字段的默认值设为TCP-1,TCP-2,TCP-3...
 79 --创建函数
 80 CREATE FUNCTION 自增长编号()
 81 RETURNS varchar(10)
 82 BEGIN
 83     DECLARE @编号 varchar(10)
 84     DECLARE @id int
 85     SELECT TOP 1 @编号 = 编号 FROM 自增长编号测试表 ORDER BY 编号 DESC
 86     IF(@@ROWCOUNT = 0)
 87         SET @编号 = ‘TCP-1‘
 88     ELSE
 89         BEGIN
 90             --获取编号的数字部分并+1
 91             SET @id = SUBSTRING(@编号,5,LEN(@编号)-4) + 1
 92             SET @编号 = ‘TCP-‘ + CONVERT(varchar(10),@id)
 93         END
 94     RETURN @编号
 95 END
 96 GO
 97 --创建表
 98 CREATE TABLE 自增长编号测试表
 99 (
100     编号 varchar(10) DEFAULT dbo.自增长编号() NOT NULL,
101     名称 varchar(10) NULL
102 )
103 GO
104 --插入数据
105 INSERT INTO 自增长编号测试表(名称) VALUES(‘aaa‘)
106 INSERT INTO 自增长编号测试表(名称) VALUES(‘bbb‘)
107 INSERT INTO 自增长编号测试表(名称) VALUES(‘ccc‘)
108 SELECT * FROM 自增长编号测试表
109
110 --删除用户定义函数
111 DROP FUNCTION 订单总额
时间: 2024-10-03 09:32:00

SqlCollections - 用户定义数据类型和函数的相关文章

动态地生成用户输入的函数表达式(C#)

我在一篇随笔"画函数图形的C#程序,兼论一个病态函数"中提到: 这个画函数图形的C#程序有一个严重的缺点,就是函数表达式是直接写的源程序中的,不能象SciLab和Matlab那样交互式地输入.不知道用 System.Reflection.Emit.ILGenerator 类能不能动态地生成用户输入的函数表达式?"空间/IV"在该随笔的评论中指出: 关于动态地生成用户输入的函数表达式, 看看下面这个帖子说不定有帮助: http://community.csdn.net

用户输入校对函数

//用户输入校对函数 //姓名校对 function checkename(str){ var m_name = /^[\u4E00-\u9FA5]{2,7}$/; return m_name.test(str); } //电子邮箱校对 function checkemail(str){ var m_email = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; return m_email.test(str)

Linux时间子系统(三) 用户空间接口函数

一.前言 从应用程序的角度看,内核需要提供的和时间相关的服务有三种: 1.和系统时间相关的服务.例如,在向数据库写入一条记录的时候,需要记录操作时间(何年何月何日何时). 2.让进程睡眠一段时间 3.和timer相关的服务.在一段指定的时间过去后,kernel要alert用户进程 本文主要描述和时间子系统相关的用户空间接口函数知识. 二.和系统时间相关的服务 1.秒级别的时间函数:time和stime time和stime函数的定义如下: #include <time.h> time_t ti

python入门学习--语句、获取用户输入、函数

1.语句 1.1 语句和表达式有什么区别呢?表达式就是某件事情,而语句是做某件事情(即告诉计算机做什么).比如2*2是4,而print2*2则是打印4 1.2 if语句 当条件为假时,什么都没发生:当条件为真时,后面的语句(上图为print语句)被执行.注:在交互式解释器内使用if语句,需要按两次回车,if语句才会执行 2.获取用户输入 python提示符(>>>)后面的语句可以算作一个完整的程序的组成部分了,输入的值由用户提供,而程序就会打印出输入的两个数的乘积1428.在编写程序的时

Win7中如何在服务中启动一个当前用户的进程——函数CreateProcessAsUser()的一次使用记录

这次工作中遇到要从服务中启动一个具有桌面UI交互的应用,这在winXP/2003中只是一个简单创建进程的问题.但在Vista 和 win7中增加了session隔离,这一操作系统的安全举措使得该任务变得复杂了一些. 一.Vista和win7的session隔离 一个用户会有一个独立的session.在Vista 和 win7中session 0被单独出来专门给服务程序用,用户则使用session 1.session 2... 这样在服务中通过CreateProcess()创建的进程启动UI应用用

【python之路21】用户登陆程序函数

一.用户登陆函数实例 1.注意:以后写函数时必须在函数第一行后按回车加入""""""""两对三引号后回车,此时会自动列出参数值,注释函数的作用.参数的用法和返回值 #!usr/bin/env python # -*- coding:utf-8 -*- def LogIn(username,password): """ 读取login文件的用户名和密码进行校验 :param username: 传入

Python从菜鸟到高手(6):获取用户输入、函数与注释

1. 获取用户输入   要编写一个有实际价值的程序,就需要与用户交互.当然,与用户交互有很多方法,例如,GUI(图形用户接口)就是一种非常好的与用户交互的方式,不过我们先不讨论GUI的交互方式,本节会采用一种原始,但很有效的方式与用户交互,这就是命令行交互方式,也就是说,用户通过命令行方式输入数据,程序会读取这些数据,并做进一步的处理.   从命令行接收用户的输入数据,需要使用input函数.input函数接收一个字符串类型的参数,用于作为输入的提示.input函数的返回值就是用户在命令行中录入

day 2 基本类型和函数

列表,元组,字典的转换. list列表是一组可变的元素集合 列表是'[]'括号组成的,[]括号包含所有元素,列表的创建可以传递字符串,也可以传递多个字符串来创建列表.如"asd", / "a","b" ... tuple元组的创建和列表一致,区别在于 元组是以'()'创建的,并且元组数据不可变. dict字典不同于列表和元组,他是一种键值对关系,即key-value,key是唯一的. 字典的作用就是储存一些需要关键字来索引数据的数据结构. byt

证明函数是对象的特殊子类型和函数的对象属性

你不知道的Javascript的作者中认为, 数组和函数是对象的特殊子类型 作者的理由是使用typeof去检查的时候, 这两种数据类型返回来的值 都是Object 作者认为是对象的特殊子类型 但是我觉得使用type去检查引用类型,得到的结果是不准确的. /* 作者还给出了一个观点 函数值对象的特殊子集 我觉得这是ok的 下面的代码 就可以证明 */ function say() { console.log("我饿了") } say.sa = "哈哈" console