码迷,mamicode.com
首页 > 数据库 > 详细

SQL Server 数据库编程

时间:2015-07-23 00:13:16      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

一、变量的定义与赋值

declare @变量名 类型

set @变量名=值

eg、

   查汽车表中名称含有宝马两个字的
declare @name varchar(20)
set @name=‘宝马‘
select * from car where Name like ‘%‘+@name+‘%‘

   查汽车表中所有汽车的平均值并输出
declare @price decimal(10,4)
select @price = AVG(Price) from Car
print ‘所有汽车的平均价格为:‘+cast(@price as varchar(20))

二、语句

1、输出语句  print ‘字符串‘

2、分支语句

a、if else 

if 判断条件
begin 
  要执行的语句
end
else
begin
  要执行的语句
end

b、case  语句(相当于C#的swtich case)(两种用法)

1.简单Case函数

CASE sex

         WHEN ‘1‘ THEN ‘男‘

         WHEN ‘2‘ THEN ‘女‘

ELSE

  ‘其他‘

END

2.Case搜索函数

CASE

   WHEN sex = ‘1‘ THEN ‘男‘

     WHEN sex = ‘2‘ THEN ‘女‘

ELSE

  ‘其他‘

END

eg1、

declare @ccname varchar(20)
set @ccname = ‘宝马‘
select * from Car where Name like 
case
  when @ccname=‘宝马‘ then ‘%宝马%‘
  when @ccname=‘奥迪‘ then ‘%奥迪%‘
else ‘%‘
end

1).两者相比,Case搜索函数功能更强。

2).Case函数类似于if……else if 语句,只返回第一个符合条件的值,之后的部分会被忽略

注意:语句结束之后不要写分号或逗号

三、存储过程

1、不带参数的存储过程(跟 视图作用相同)

eg

1 create procedure MyPRO --procedure为创建存储过程关键字,也可以简写proc,MyPRO为存储过程名
2 as
3 select * from authors
4 --执行存储过程
5 exec mypro  --exec表示执行存储过程

2、带参数的存储过程

create procedure BuyFriut
@Uid varchar(50),
@Fcode varchar(50),
@Sl int
as
begin
    declare @kc int,@price float
    select @kc=Numbers,@price=Price from Fruit where Ids=@Fcode
    if @Sl>@kc
    begin
        print 库存不足!
    end
    else
    begin
        declare @ye float
        select @ye=Account from Login where UserName=@Uid
        if @ye>= @price*@Sl
        begin
            update Fruit set Numbers=Numbers-@Sl where Ids=@Fcode
            update Login set Account=Account-@price*@Sl where UserName=@Uid
            declare @sj int
            set @sj = cast(rand()*10000    as int)                
            insert into Orders values(@sj,@Uid,GETDATE())--添加内容的时候 先写主键表,再写外键表
            insert into OrderDetails values(@sj,@Fcode,@Sl)        
        end
        else
        begin
            print 余额不足!
            
        end
    end    
end

go
--使用存储过程
declare @s int
exec  @s = BuyFriut wangwu,k001,20
print @s 

--删除存储过程
drop proc BuyFriut

3、触发器

     触发器,是一种特殊的存储过程,可以用来对表实施复杂的完整性约束,保持数据的一致性。当触发器所保护的数据发生改变时,触发器会自动被激活,并执行触发器中所定义的相关操作,从而保证对数据的不完整性约束或不正确的修改。

    用到的两个表inserted表和deleted表,临时表,作用是为了恢复数据

eg

select * from Loginone
select * from biandong
go
--创建触发器
create trigger TR_LOGINONE_DELETE
on Loginone
a、for delete 触发器 --删除的时候执行(第一类)

eg

as
begin
declare @uid varchar(50),@name varchar(50)
select @uid=UserName,@name=Name from deleted
insert into biandong values(@uid,@name,删除)
end
go
--在对表loginnoe进行删除的时候触发器执行
delete from Loginone where UserName=aaa

go

b、instead of delete 触发器 --替代执行(第三类)

--删除student里面的数据的时候用另外两条语句替代,先删从表再删主表

create trigger TR_STUDENT_DELETE
on Student
instead of delete
as
begin
    declare @sno varchar(20)
    select @sno=sno from deleted
    delete from score where sno=@sno
    delete from student where sno=@sno
    end
--执行删除的时候触发
delete from student where sno=101

c、after delete --删除之后执行(第二类)

4、事务

a、开始事务 begin tran(transaction)
b、提交 commit
c、回滚 rollback

select * from Car
select * from Brand

begin transaction --开始事务
delete from Car where Code=c005
delete from Brand where Brand_Code=b002
 if @@ERROR=0--判断是否出错,如果执行没错@@ERROR为0
begin
    commit -- 提交事务
end
else
begin
    rollback--回滚事务
end

--try catch
begin transaction --开始事务
begin try --try里面写要执行的代码
    delete from Car where Code=c005
    delete from Brand where Brand_Code=b002
    commit
end try
begin catch
    rollback
end catch

 

SQL Server 数据库编程

标签:

原文地址:http://www.cnblogs.com/xtxtx/p/4668863.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!