T-SQL学习笔记
学习T-SQL时记录的笔记,记得并不全也不详细
if和while语句
declare @age int
select @age = DATEDIFF(year,stuAge,getdate()) from TbStudent where stuName = '孙悟空'
if(@age>=18)
begin --必须有begin..end
	print N'已成年'
end
else
begin
	print N'未成年'
end
declare @sum int
set @sum = 0
declare @i int
set @i = 1
while(@i <= 100)
begin
	if(@i % 2 <> 0)
	begin
		set @sum = @sum + @i
	end
	set @i = @i + 1
end
print @sum
自定义函数
分为标量函数、表值函数(内联表值函数和多语句表值函数)
标量函数:只返回一个基础类型数据的值
-- 语法
create function 函数名
([参数列表])  可以不写参数,先写变量名再写类型
returns 返回值类型
as
begin
--	······函数体语句
	return 返回值
end
表值函数:返回一个table类型的结果集
内联表值函数
-- 语法
create function 函数名
([参数名])
returns table
as
return (一条select语句)
多语句表值函数
多语句表值函数可以看作是标量函数和内联表值函数的结合体
-- 语法
create function 函数名([参数列表])
returns 表变量名 table
(表变量的字段定义)
as
begin
	SQL
	return 这里啥都不写
end
注意
- SQL自定义函数必须有返回值
- 在自定义函数中不允许修改基表内容(即,不能用insert,update,delete)
- 如果有多个参数,每个参数一之间用逗号隔开
- 调用函数时,函数名前要加dbo.
存储过程
存储过程时存储在服务器上的一组T-SQL语句的集合,用来完成一个特定功能。
分为系统存储过程(系统自带)和自定义存储过程
自定义存储过程
-- 语法
create procedure(或proc) 存储过程名(up_)
[参数列表] --这里的参数列表不能使用圆括号
begin
	存储过程代码
end
注意:
- 存储过程可以没有返回值
- 存储过程不适用return语句带回返回值,如果有返回值,直接使用select语句返回
索引
- 索引:创建在表上
- 作用: 加快检索速度
- 全表扫面
- 索引分为聚集索引和非聚集索引
- 聚集索引: 在一个数据表中,只能创建一个聚集索引
- 主键会默认创建一个聚集索引
- 在你经常使用where的字段上添加非聚集索引
- 缺点:占用额外的存储空间,有可能降低insert、update、delete的速度
事务
事务时并发控制的单位,他是用户定义的一个操作,这些操作要么都做要么都不做,不可分割。
分为:SQL Server事务和ADO.NET事务
-- 语法
begin tran  --开始一个事务操作
commit tran --提交
rollback    --回滚
C#中使用时,通常把事务的操作封装到存储过程中
触发器
- 触发器是一种特殊的存储过程
- 只不过这个存储过程是不允许显示调用的
- 他只能在做了特定事件后,自动触发做出响应的
- 两张临时数据表:inserted、deleted
- 只能在触发器中访问
- 触发器是附着在一张表上的
-- 语法
create trigger 触发器名字
on 表名
after(或for) 之后触发 / instead of 之前触发 [insert/delete/update]
as
begin
-- ······
end
触发器的触发条件:insert,delete,update
create trigger tr_Bank_insert
on Bank
after insert
as
begin
	print '往Bank表中插入了记录'
end
create trigger tr_Bank_Delete
on Bank
after delete
as
begin
	declare @id int
	declare @userName nvarchar(8)
	declare @userMoney int
	select @id = id, @userMoney = userMoney, @userName = userName from deleted
	insert into BankBak values(@id, @userName, @userMoney)
end
select * from Bank
select * from BankBak
delete from Bank where id = 3
SQL Server的触发器是表级触发器,表上一次性的多次操作只触发一次
T-SQL学习笔记的更多相关文章
- ORALCE  PL/SQL学习笔记
		ORALCE PL/SQL学习笔记 详情见自己电脑的备份数据资料 
- Oracle之PL/SQL学习笔记
		自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ... 
- SQL学习笔记
		SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ... 
- [SQL学习笔记][用exists代替全称量词 ]
		学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ... 
- SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装
		刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ... 
- pl/sql学习笔记---马士兵教程38-48
		Procedure Language/Structure query Language 一.关于语言学习 1.数据类型 2.语法 通过例子来学习很快就能明白 set serverputout on ... 
- SQL学习笔记之SQL查询练习题1
		(网络搜集) 0x00 表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id ... 
- SQL学习笔记之MySQL索引知识点
		0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ... 
- SQL学习笔记:一些高级语句
		现在以MySQL为模板.学习的方法和别的数据库写法上会有不同,但是思路基本一致. 用到的数据库表的格式: +----+--------------+-------------------------- ... 
- SQL学习笔记:基础SQL语句
		目录 语句特点 进入数据库 基本查询语句 SELECT DISTINCT WHERE AND/OR/NOT :逻辑运算符 ORDER BY :排序 基本修改语句 INSERT:添加语句 UPDATE: ... 
随机推荐
- appium+python 微信小程序的自动化
			sudo kill -9 $(lsof -i:8889 -t) mitmweb -p 8889 -s addons.py mitmdump -q -p 8889 -s addons.py http: ... 
- python matplotlib生成图形
			y=2x+3 import matplotlib.pyplot as plt#约定俗成的写法plt #首先定义两个函数(正弦&余弦) import numpy as np #plt.figur ... 
- DNA甲基化与癌症、泛癌早筛 | DNA methylation and pan-cancer
			虽然我们现在完全没有甲基化的数据,但还是可以了解一下. 什么是DNA甲基化,与组蛋白修饰有什么联系? DNA Methylation and Its Basic Function 表观的定义就是DNA ... 
- https://blog.csdn.net/qq_35636311/article/details/78255568 cPython  扩展
			https://blog.csdn.net/qq_35636311/article/details/78255568 http://book.pythontips.com/en/latest/pyth ... 
- 获取div下的input type为file的所有对象
			var files = $(".profile-content").find("input[type='file']"); files.each(functio ... 
- macos下如何解决无法写ntfs格式的u盘或硬盘?
			答:macos原生支持,可以通过脚本卸载再重新挂载为可读写即可,脚本在此 
- 数据包分析中Drop和iDrop的区别
			数据包分析中Drop和iDrop的区别 在数据包分析中,Drop表示因为过滤丢弃的包.为了区分发送和接受环节的过滤丢弃,把Drop又分为iDrop和Drop.其中,iDrop表示接受环节丢弃的包, ... 
- iptables 配置场景3
			iptables -I INPUT -i lo -j ACCEPT #允许本地回环地址访问: iptables -I INPUT -m state --state ESTABLISHED,REL ... 
- Intellij IDEA 2019 最新优化配置
			Intellij IDEA 2019 最新优化配置 转发自Dimple’s Blog 摘要: 之前在CSDN上写了一点关于IDEA的优化配置之类的文章,有些图片失效了,很多人都希望会有继续更新 ... 
- openresty开发系列26--openresty中使用redis模块
			openresty开发系列26--openresty中使用redis模块 在一些高并发的场景中,我们常常会用到缓存技术,现在我们常用的分布式缓存redis是最知名的, 操作redis,我们需要引入re ... 
