首页
网站首页
公司简介
资讯中心
推荐内容
返回顶部
存储过程和触发器的应用,来自动发送邮件
发布时间:2019-12-29 04:19
浏览次数:

事务

工功效于将一些操作的三个SQL作为原子性操作,生机勃勃旦有某一个现身错误,即可回滚到原本的情景,从而确定保证数据库数据完整性。

图片 1图片 2

 1 delimiter \
 2 create PROCEDURE p1(
 3     OUT p_return_code tinyint
 4 )
 5 BEGIN 
 6   DECLARE exit handler for sqlexception 
 7   BEGIN 
 8     -- ERROR 
 9     set p_return_code = 1; 
10     rollback; 
11   END; 
12  
13   DECLARE exit handler for sqlwarning 
14   BEGIN 
15     -- WARNING 
16     set p_return_code = 2; 
17     rollback; 
18   END; 
19  
20   START TRANSACTION; 
21     DELETE from tb1;
22     insert into tb2(name)values('seven');
23   COMMIT; 
24  
25   -- SUCCESS 
26   set p_return_code = 0; 
27  
28   END\
29 delimiter ;

援助专门的学业的蕴藏进度

1 set @i =0;
2 call p1(@i);
3 select @i;

尝试案例风姿浪漫:验证索引的法力

 

前段时间在写SQL进度中发觉须要对一张表构造作调度(此处是SQL Server),此中须要删除多列,由于事情发生前都以一条SQL语句删除一列,于是疑心是或不是可以一条语句同临时间删除多列,借使得以,怎么写法?

函数

MySQL中提供了累累松手函数,举个例子:

图片 3图片 4

 1 CHAR_LENGTH(str)
 2         返回值为字符串str 的长度,长度的单位为字符。一个多字节字符算作一个单字符。
 3         对于一个包含五个二字节字符集, LENGTH()返回值为 10, 而CHAR_LENGTH()的返回值为5。
 4 
 5     CONCAT(str1,str2,...)
 6         字符串拼接
 7         如有任何一个参数为NULL ,则返回值为 NULL。
 8     CONCAT_WS(separator,str1,str2,...)
 9         字符串拼接(自定义连接符)
10         CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。
11 
12     CONV(N,from_base,to_base)
13         进制转换
14         例如:
15             SELECT CONV('a',16,2); 表示将 a 由16进制转换为2进制字符串表示
16 
17     FORMAT(X,D)
18         将数字X 的格式写为'#,###,###.##',以四舍五入的方式保留小数点后 D 位, 并将结果以字符串的形式返回。若  D 为 0, 则返回结果不带有小数点,或不含小数部分。
19         例如:
20             SELECT FORMAT(12332.1,4); 结果为: '12,332.1000'
21     INSERT(str,pos,len,newstr)
22         在str的指定位置插入字符串
23             pos:要替换位置其实位置
24             len:替换的长度
25             newstr:新字符串
26         特别的:
27             如果pos超过原字符串长度,则返回原字符串
28             如果len超过原字符串长度,则由新字符串完全替换
29     INSTR(str,substr)
30         返回字符串 str 中子字符串的第一个出现位置。
31 
32     LEFT(str,len)
33         返回字符串str 从开始的len位置的子序列字符。
34 
35     LOWER(str)
36         变小写
37 
38     UPPER(str)
39         变大写
40 
41     LTRIM(str)
42         返回字符串 str ,其引导空格字符被删除。
43     RTRIM(str)
44         返回字符串 str ,结尾空格字符被删去。
45     SUBSTRING(str,pos,len)
46         获取字符串子序列
47 
48     LOCATE(substr,str,pos)
49         获取子序列索引位置
50 
51     REPEAT(str,count)
52         返回一个由重复的字符串str 组成的字符串,字符串str的数目等于count 。
53         若 count <= 0,则返回一个空字符串。
54         若str 或 count 为 NULL,则返回 NULL 。
55     REPLACE(str,from_str,to_str)
56         返回字符串str 以及所有被字符串to_str替代的字符串from_str 。
57     REVERSE(str)
58         返回字符串 str ,顺序和字符顺序相反。
59     RIGHT(str,len)
60         从字符串str 开始,返回从后边开始len个字符组成的子序列
61 
62     SPACE(N)
63         返回一个由N空格组成的字符串。
64 
65     SUBSTRING(str,pos) , SUBSTRING(str FROM pos) SUBSTRING(str,pos,len) , SUBSTRING(str FROM pos FOR len)
66         不带有len 参数的格式从字符串str返回一个子字符串,起始于位置 pos。带有len参数的格式从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。 使用 FROM的格式为标准 SQL 语法。也可能对pos使用一个负值。假若这样,则子字符串的位置起始于字符串结尾的pos 字符,而不是字符串的开头位置。在以下格式的函数中可以对pos 使用一个负值。
67 
68         mysql> SELECT SUBSTRING('Quadratically',5);
69             -> 'ratically'
70 
71         mysql> SELECT SUBSTRING('foobarbar' FROM 4);
72             -> 'barbar'
73 
74         mysql> SELECT SUBSTRING('Quadratically',5,6);
75             -> 'ratica'
76 
77         mysql> SELECT SUBSTRING('Sakila', -3);
78             -> 'ila'
79 
80         mysql> SELECT SUBSTRING('Sakila', -5, 3);
81             -> 'aki'
82 
83         mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2);
84             -> 'ki'
85 
86     TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) TRIM(remstr FROM] str)
87         返回字符串 str , 其中所有remstr 前缀和/或后缀都已被删除。若分类符BOTH、LEADIN或TRAILING中没有一个是给定的,则假设为BOTH 。 remstr 为可选项,在未指定情况下,可删除空格。
88 
89         mysql> SELECT TRIM('  bar   ');
90                 -> 'bar'
91 
92         mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx');
93                 -> 'barxxx'
94 
95         mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx');
96                 -> 'bar'
97 
98         mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz');
99                 -> 'barx'

风流倜傥对平放函数

1、自定义函数

图片 5图片 6

 1 delimiter \
 2 create function f1(
 3     i1 int,
 4     i2 int)
 5 returns int
 6 BEGIN
 7     declare num int;
 8     set num = i1 + i2;
 9     return(num);
10 END \
11 delimiter ;

View Code

2、删除函数

1 drop function func_name;

3、施行函数

图片 7图片 8

1 # 获取返回值
2 declare @i VARCHAR(32);
3 select UPPER('alex') into @i;
4 SELECT @i;
5 
6 
7 # 在查询中使用
8 select f1(11,nid) ,name from tb2;

View Code

 

1、首先创制三个数据量大的表,名为“学子表”,分别有三列,学号,姓名和班级,如下图所示,学号为活动编号,班级为暗中认可值“少年老成班”。

可以选用SQL SERubiconVE哈弗 来发送自动邮件,紧借使应用SQL SE中华VVE君越 的dbo.sp_send_dbmail 存储进程(在msdb数据库中)。

第三遍猜测如下(注意:此处是猜度,非精确的写法):

图片 9

具体步骤如下:

ALTER TABLE TableName DROP COLUMN column1,column2

2、向表中插入多量数码,数据更多,验证索引的意义越好。

Step1: 编写要发送的邮件内容,然后调用sp_send_dbmail 存款和储蓄进度来发送邮件:

只是履行后,发现语法错误, 于是改成如下的主意:

应用语句完成:While 1>0  Insert into 学生表(姓名卡塔尔(قطر‎  values(‘于美观’卡塔尔国

declare @tableHTML varchar(max)

SET @tableHTML =

N'<style>

table { width:100%;}

table, th, td {

border: 1px solid black;

border-collapse: collapse;}

th, td {

padding: 5px;

text-align: left;}

th { background-color:#4682B4;

font-size:12.0pt;

font-weight:bold;

font-family:Arial ,sans-serif;

color :#ffffff;}

 tr { font-size:8.0pt;font-family:Arial,sans-serif;}'+

N'</style><H1 style="text-align:center">部门信息</H1>'+

N'<table align="center">'+

N'<tr><th width=20%" >部门编号</th>'+

N'<th width=40%>部门名称</th><th width=40%>上级部门名称</th>'+
N'</tr>'+
CAST((
select 
td=a.DepartID,'',
td=a.DepartName,'',
td=ISNULL(b.DepartName,'(NULL)'),''
from TTEM.dbo.EMOrgStructure a 

leftjoin TTEM.dbo.EMOrgStructure b on a.DepartParentID=b.DepartID

FORXMLPATH('tr'),TYPE

)ASNVARCHAR(MAX))+

N'</table>';
Exec dbo.sp_send_dbmail
@profile_name='DannyTest',
 @recipients ='V-Test@163.com',
 @subject='Test Stored Procedure Funtion of Sending Mails',
 @body=@tableHTML,
 @body_format ='HTML';
ALTER TABLE TableName DROP COLUMN column1,COLUMN column2

地方语句是两个死循环,除非免强甘休,借使1大于0就能够平昔向表中插入姓名

 

实行不利,之后查看表布局,开掘列已去除,证明猜度正确。

平时来说图所示:

Step2: 施行完STEP1 的代码后就足以在收件箱中查看见刚才从SQL SE奥迪Q7VESportage自动发送的邮件了:

图片 10

 

等候5分钟左右,张开表的习性,查看表的行数,当前为1032363,如下图所示:

图片 11

图片 12

   

3、 使用语句查询第900000行的数码,Select * from 学生表 Where 学号=900000

Step3: 初次在MSDB 中调用sp_send_dbmail 时,只怕不成事,那是因为数据库暗中认可未有启用和安顿邮件成效,可参看如下步骤:

图片 13

1,在SQL MANAGEMETN STUDIO 的“Management”---->"Database Mail"中张开铺排:首要时设置Profile Name,设置发送邮件的发送给别人,发送邮件服务器等

友情链接: 网站地图
Copyright © 2015-2019 http://www.nflfreepicks.net. 新葡萄京娱乐场网址有限公司 版权所有