学习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学习笔记的更多相关文章

  1. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  2. Oracle之PL/SQL学习笔记

    自己在学习Oracle是做的笔记及实验代码记录,内容挺全的,也挺详细,发篇博文分享给需要的朋友,共有1w多字的学习笔记吧.是以前做的,一直在压箱底,今天拿出来整理了一下,给大家分享,有不足之处还望大家 ...

  3. SQL学习笔记

    SQL(Structured Query Language)学习笔记 [TOC] Terminal登录数据库 1.登录mysql -u root -p ; 2.显示所有数据库show database ...

  4. [SQL学习笔记][用exists代替全称量词 ]

    学习sql的必经问题. 学生表student (id学号 Sname姓名 Sdept所在系) 课程表Course (crscode课程号 name课程名) 学生选课表transcript (studi ...

  5. SQL学习笔记——SQL初入门,Ubuntu下MySQL的安装

          刚开始接触sql,于是准备在Ubuntu下学习sql,就跟着itercast的sql教程开始入门了. 下面只是我个人的记录,高手请绕道: 一. 在安装之前,我们可以用下面这个命令通过开放端 ...

  6. pl/sql学习笔记---马士兵教程38-48

    Procedure Language/Structure query Language 一.关于语言学习 1.数据类型 2.语法   通过例子来学习很快就能明白 set serverputout on ...

  7. SQL学习笔记之SQL查询练习题1

    (网络搜集) 0x00 表名和字段 –1.学生表 Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别 –2.课程表 Course(c_id ...

  8. SQL学习笔记之MySQL索引知识点

    0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...

  9. SQL学习笔记:一些高级语句

    现在以MySQL为模板.学习的方法和别的数据库写法上会有不同,但是思路基本一致. 用到的数据库表的格式: +----+--------------+-------------------------- ...

  10. SQL学习笔记:基础SQL语句

    目录 语句特点 进入数据库 基本查询语句 SELECT DISTINCT WHERE AND/OR/NOT :逻辑运算符 ORDER BY :排序 基本修改语句 INSERT:添加语句 UPDATE: ...

随机推荐

  1. CORS & CSP笔记

    1.CORS & CSP 浏览器跨域相关的安全策略主要存在于两个方面: 浏览器是否发送ajax 浏览器是否加载返回数据 假设从a.com 向b.com发送ajax请求.此时浏览器当前页面为a. ...

  2. ubuntu之路——day8.2 深度学习优化算法之指数加权平均与偏差修正,以及基于指数加权移动平均法的动量梯度下降法

    首先感谢吴恩达老师的免费公开课,以下图片均来自于Andrew Ng的公开课 指数加权平均法 在统计学中被称为指数加权移动平均法,来看下面一个例子: 这是伦敦在一些天数中的气温分布图 Vt = βVt- ...

  3. mfc封装cef浏览器 关闭整个窗口程序得时候又重启mfc 应用的程序

    最近使用mfc 做了一个cef得浏览器 多标签得.当使用这个封装得浏览器一段时间之后(超过1分钟2分钟) 当关闭封装得浏览器整个窗体 x得时候,整个窗体又重新弹了出来. 大概现象就是一个exe程序你杀 ...

  4. Spark(四十七):Spark UI 数据可视化

    导入: 1)Spark Web UI主要依赖于流行的Servlet容器Jetty实现: 2)Spark Web UI(Spark2.3之前)是展示运行状况.资源状态和监控指标的前端,而这些数据都是由度 ...

  5. 在Eclipse IDE进行Struts开发时提示错误:java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.FilterDispatcher的解决办法

    If you have... included all necessary jars Configured build path correctly added them all in deploym ...

  6. java查询数据库数据时报错antlr/ANTLRException

    在集成SH项目时,写hql 语句总是查不出东西,而且报 java.lang.NoClassDefFoundError: antlr/ANTLRException,郁闷了很久在网上终于找到了答案,原来是 ...

  7. 004 API约定

    在具体的学习前,我还是决定学一下,REST风格中在ES中的约定. 1.多重索引 先准备数据: 如果不小心,json里的值写错了,修改过来,重新执行即可. PUT index1/_doc/1 { &qu ...

  8. Centos7 安装 weblogic12.2.1.0.0

    下载地址:地址:http://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-main-097127.html 下载最新的we ...

  9. linux内核中的电源管理接口

    1. pm_runtime_enable/pm_runtime_disable 使能/禁止runtime PM,分别对dev->power.disable_depth执行++和--操作,这个变量 ...

  10. Docker Error response from daemon: driver failed programming external connectivity on endpoint webserver

    按照官网的配置, https://docs.docker.com/docker-for-windows/ 当执行到第 5 步时 如果当前你的电脑 80 端口已经被别的程序占用,运行以上命令就会报错,报 ...