当前位置: 移动技术网 > IT编程>数据库>MSSQL > T-SQL学习笔记

T-SQL学习笔记

2019年09月10日  | 移动技术网IT编程  | 我要评论

蝶变新生大结局,诺顿安全认证,群交40p

学习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的触发器是表级触发器,表上一次性的多次操作只触发一次

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网