SQL SERVER数据库基本操作

 SQL SERVER

 存储过程

 

1  create proc 存储过程名称
2  as
3  begin
4    set nocount on;
5    --sql语句
6  end
7  go 

  

 

  

变量

--1、变量名以@开头 select,set
declare @num int 
set @num=1
print @num

declare @num1 int =1
print @num1

declare @id int 
select @id from result where name=''

  

事务

  

begin transaction    --开启一个事务
declare @error int=0    --定义变量 赋值
--卖家,卖加的账户要加钱
update AccountCompany set UserAccount = UserAccount+9000 where id=2
set @error=@error+@@ERROR    --ERROR全局变量,获取错误的编号
--买家,账户扣钱
update AccountCompany set UserAccount = UserAccount-9000 where id=1
set @error=@error+@@ERROR
if @error<>0
  begin
    RollBack TRANSACTION --事务进行回滚
  end
  else
  begin
    COMMIT TRANSACTION --提交
  end

select * from AccountCompany

 

触发器

优点:

1、触发器是自动的,当对表中的数据做了任何修改之后立即被激活

2、触发器可以通过数据库中相关表进行层叠修改

3、触发器可以强制限制,这些限制比用CHECK约束所定义的更复杂,与CHECK约束不同的是,触发器可以引用其他表中的列

触发器的作用

触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂参照完整性和数据的一致性,它能够对数据库中的相关表进行级联修改,提高比CHECK约束更复杂的的数据完整性,并自定义错误消息。触发器的主要作用主要有以下接个方面:

  1. 强制数据库间的引用完整性

  2. 级联修改数据库中所有相关的表,自动触发其它与之相关的操作

  3. 跟踪变化,撤销或回滚违法操作,防止非法修改数据

  4. 返回自定义的错误消息,约束无法返回信息,而触发器可以

  5. 触发器可以调用更多的存储过程

触发器: 在对数据库数据进行操作(增加(insert)、修改(update)、删除(delete))后,可以自动执行的操作

触发器分为两类:instead of 触发器 ,after(for)触发器。

  instead of 触发器:在数据更新到数据库之前执行的操作

  after(for)触发器:在数据更新到数据后再执行的操作

数据临时载体:inserted和deleted

  inserted:存储操作中新增的或者更新的数据

  deleted:存储操作中删除的数据

--Insert操作Instead of 触发器    在数据更新到数据库之前执行的操作
create trigger 触发器名称
    on 表名
    instead of insert --操作(增删改)
as
begin
    --需要执行的业务
end
--Insert操作After 触发器     在数据更新到数据后在执行的操作
create trigger 触发器名称
    on 表明
    After Insert
as
begin
    --需要执行的业务
end
--GO的意思是分批处理语句

  

自定义函数

用户自定义函数的类型:

1、标量值函数(返回一个标量值)

2、表格值函数(内联表格值函数、多语句表值函数,返回一个结果集即返回多个值)

特点:内联表格值函数支持在WHERE子句中使用参数

--标量值函数
go
create function funName
(@strName nvarchar(50))
returns bit
as 
begin 
    declare @len bit
    if(len(@strName)>1)
    begin
        set @len=0
    end
    else
    begin
        set @len=1
    end
​
    return @len
end
go
​
select dbo.funName('张')

  

--内联表格值函数
go
create function fun1 (@id int)
returns table --返回一个表
as
    return select * from Lemon..Man where Id=@id;
    
go
​
select * from fun1(2)

  

--多语句表值函数
go
create function fun2
()
returns @tableName table(strname nvarchar)
as 
begin
     insert @tableName select strname from @tableName
     return 
end

 

posted @ 2020-06-30 19:54  火星转地球  阅读(146)  评论(0编辑  收藏  举报