经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
T-SQL学习笔记
来源:cnblogs  作者:鳕鱼堡  时间:2019/9/10 10:50:34  对本文有异议

学习T-SQL时记录的笔记,记得并不全也不详细

if和while语句

  1. declare @age int
  2. select @age = DATEDIFF(year,stuAge,getdate()) from TbStudent where stuName = '孙悟空'
  3. if(@age>=18)
  4. begin --必须有begin..end
  5. print N'已成年'
  6. end
  7. else
  8. begin
  9. print N'未成年'
  10. end
  1. declare @sum int
  2. set @sum = 0
  3. declare @i int
  4. set @i = 1
  5. while(@i <= 100)
  6. begin
  7. if(@i % 2 <> 0)
  8. begin
  9. set @sum = @sum + @i
  10. end
  11. set @i = @i + 1
  12. end
  13. print @sum

自定义函数

分为标量函数、表值函数(内联表值函数和多语句表值函数)

标量函数:只返回一个基础类型数据的值

  1. -- 语法
  2. create function 函数名
  3. ([参数列表]) 可以不写参数,先写变量名再写类型
  4. returns 返回值类型
  5. as
  6. begin
  7. -- ······函数体语句
  8. return 返回值
  9. end

表值函数:返回一个table类型的结果集

内联表值函数

  1. -- 语法
  2. create function 函数名
  3. ([参数名])
  4. returns table
  5. as
  6. return (一条select语句)

多语句表值函数

多语句表值函数可以看作是标量函数和内联表值函数的结合体

  1. -- 语法
  2. create function 函数名([参数列表])
  3. returns 表变量名 table
  4. (表变量的字段定义)
  5. as
  6. begin
  7. SQL
  8. return 这里啥都不写
  9. end

注意

  • SQL自定义函数必须有返回值
  • 在自定义函数中不允许修改基表内容(即,不能用insert,update,delete)
  • 如果有多个参数,每个参数一之间用逗号隔开
  • 调用函数时,函数名前要加dbo.

存储过程

存储过程时存储在服务器上的一组T-SQL语句的集合,用来完成一个特定功能。
分为系统存储过程(系统自带)和自定义存储过程

自定义存储过程

  1. -- 语法
  2. create procedure(或proc) 存储过程名(up_)
  3. [参数列表] --这里的参数列表不能使用圆括号
  4. begin
  5. 存储过程代码
  6. end

注意:

  • 存储过程可以没有返回值
  • 存储过程不适用return语句带回返回值,如果有返回值,直接使用select语句返回

索引

  • 索引:创建在表上
  • 作用: 加快检索速度
  • 全表扫面
  • 索引分为聚集索引和非聚集索引
  • 聚集索引: 在一个数据表中,只能创建一个聚集索引
  • 主键会默认创建一个聚集索引
  • 在你经常使用where的字段上添加非聚集索引
  • 缺点:占用额外的存储空间,有可能降低insert、update、delete的速度

事务

事务时并发控制的单位,他是用户定义的一个操作,这些操作要么都做要么都不做,不可分割。
分为:SQL Server事务和ADO.NET事务

  1. -- 语法
  2. begin tran --开始一个事务操作
  3. commit tran --提交
  4. rollback --回滚

C#中使用时,通常把事务的操作封装到存储过程中

触发器

  • 触发器是一种特殊的存储过程
  • 只不过这个存储过程是不允许显示调用的
  • 他只能在做了特定事件后,自动触发做出响应的
  • 两张临时数据表:inserted、deleted
  • 只能在触发器中访问
  • 触发器是附着在一张表上的
  1. -- 语法
  2. create trigger 触发器名字
  3. on 表名
  4. after(或for) 之后触发 / instead of 之前触发 [insert/delete/update]
  5. as
  6. begin
  7. -- ······
  8. end

触发器的触发条件:insert,delete,update

  1. create trigger tr_Bank_insert
  2. on Bank
  3. after insert
  4. as
  5. begin
  6. print '往Bank表中插入了记录'
  7. end
  8. create trigger tr_Bank_Delete
  9. on Bank
  10. after delete
  11. as
  12. begin
  13. declare @id int
  14. declare @userName nvarchar(8)
  15. declare @userMoney int
  16. select @id = id, @userMoney = userMoney, @userName = userName from deleted
  17. insert into BankBak values(@id, @userName, @userMoney)
  18. end
  19. select * from Bank
  20. select * from BankBak
  21. delete from Bank where id = 3

SQL Server的触发器是表级触发器,表上一次性的多次操作只触发一次

原文链接:http://www.cnblogs.com/xueyubao/p/11494304.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号