QyonJ

下一秒的阳光会不会更灿烂
sql基础

 

 

存储过程一般用在实现复杂的功能,数据操纵方面。

存储过程:一段有名子的代码块,对单表或多表的增删改查,用时进行调用
          只返回单一记录集的存储过程 --> 没有输入输出的存储过程 --> 有返回值的存储过程 --> 有输入参数和输出参数的存储过程 --> 同时具有返回值、输入参数、输出参数的存储过程 --> 同时返回参数和记录集的存储过程 --> 返回多个记录集的存储过程
          return @@rowcount为执行存储过程影响的行数,执行的结果是不仅插入了一条数据,还返回了一个值即 return value =1


          --------------创建存储过程-----------------


          CREATE PROC [ EDURE ] procedure_name [ ; number ]
          [ { @parameter data_type }
          [ VARYING ] [ = default ] [ OUTPUT ]
           ] [ ,...n ]


          [ WITH{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]


          [ FOR REPLICATION ]


          AS sql_statement [ ...n ]


          --------------调用存储过程-----------------


          EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value


          --------------删除存储过程-----------------


          drop procedure procedure_name    --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程

游标作用:
1.定位到结果集中的某一行。
2.对当前位置的数据进行读写。
3.可以对结果集中的数据单独操作,而不是整行执行相同的操作。
4.是面向集合的数据库管理系统和面向行的程序设计之间的桥梁。

declare @ID int
declare @Oid int
declare @Login varchar(50)
 
--定义一个游标
declare user_cur cursor for select ID,Oid,[Login] from ST_User
--打开游标
open user_cur
while @@fetch_status=0
begin
--读取游标
    fetch next from user_cur into @ID,@Oid,@Login
    print @ID
    --print @Login
end
close user_cur
--释放游标
deallocate user_cur
视图:视图是一张虚拟表,他所存储的不是实际数据,而是查询语句
         创建:create view vw_city
               as
               select cityName from city
         查询:select * from vw_city
局部变量:
         局部变量的声明(一个@)
         declare @n int   --声明变量关键字为declare 然后@加变量名 后面是变量类型
         declare @s varchar(36)
         局部变量的赋值
         set @s='f4'
         set @n=@n+1  --变量的赋值有两种方法,一种是通过set,一种是select 如果变量不附初始值则默认为null,null参与计算的结果还是null,这一行的@n就等于null
         select @n=age from students  --如过变量通过select赋值,这里可能在表中查到很多age结果,这里只赋值查询出来的最后一个age结果,如果set使用这种方法会出错。
         set @n=(select age from Students where ID='1')--亦可以这样给他赋值
全局变量:
          select @@ERROR    --返回最后执行的 Transact-SQL 语句的错误代码(integer)(如果最后一条语句不出错,就一直是0)
          select @@IDENTITY   --返回最后插入的标识值
条件语句:
         if(条件表达式)
         begin
         语句...
         end
         else
         begin
         语句...
         end
循环语句:
         while
         begin
         语句....
         break/continue
         end
事务(去不了终点,回到原点)
     如果你要一起执行多条语句,如果有一条失败你就可以让他们全部都撤销执行。
     ---bank表为转账表,MeMoney字段为我的账余额,HeMoney为朋友的账户余额,这个事务完成的是我给朋友转账
     begin tran
     declare @ersum int        --定义这个局部变量为了记载这个事务过程中是否会出错,如果出错则最终将得不到为0的值,也就完成了我们判断这个事务是否出错过
     set @ersum=0
     update bank set MeMoney=MeMoney-1000 where ID=me   ---从我卡里扣掉1000
     set @ersum=@ersum+@@ERROR           --如果不出错这里还是0,如果错了,这里将不是0
     update bank set HeMoney=HeMoney+100 where ID=he    ---给我朋友卡里加上1000
     set @ersum=@ersum+@@ERROR     --如果这里的结果是0将表明没有出错
     if(@ersum<>0)  --true有错,false没错
     begin
     rollback tran  ---回滚事务
     end
     else
     begin
     commit tran    --执行事务
     end
触发器:
       数据库中的表有所改动(添删改)是会触发一中事件
       --这个例子是,删除Tb1里面的数据,把删除的数据同时备份到Tb1Bak表中
       create trigger tri_bak on Tb1              --声明一个tri_bak ,如果Tb1表中的数据变化触发这个触发器
       after delete                               ---删除完成后执行下面的操作
       as
       insert into Tb1Bak select * from deleted   ---这里的deleted是系统自动生成的表,存放为上一次的数据库表中删除的数据。
时间函数:
         --getdate 获取当前时间
         select getdate()
 
         --dateadd 原有时间加: 2013-02-17 13:20:16 此时间加12个月
         select dateadd(MONTH,12,'2013-02-17 13:20:16')  --返回:2014-02-17 13:20:16.000  (参数month可以改为 day,year等日期加相应的值)
 
         --datediff 两个时间的差 (后面-前面=返回值)
         select datediff(day,'2013-02-01','2013-02-18')   --返回:17  (参数day可以改为 month,year等日期加相应的值)
 
         --datepart 获取日期的某个部分整数
         select DATEPART(month, '2013-2-17')  --返回 2    (参数month可以改为 day,year等日期加相应的值)
 
         --datename 获取指定部位的字符串
         select datename(weekday, '2013-2-17')  --返回 星期日 (参数weekday可以改为 day,year等日期加相应的值)


         --day(), month(),year() 获取指定部位的字符串
         select day('2013-2-15') --返回15
         格式转换:
         select CONVERT(varchar, getdate(), 120 )  --返回 2013-02-17 13:37:54 
         select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),'-',''),' ',''),':','') --返回 20130217133828


         select CONVERT(varchar(12) , getdate(), 111 )  --返回 2013/02/17


         select CONVERT(varchar(12) , getdate(), 112 )  --返回 20130217


         select CONVERT(varchar(12) , getdate(), 102 )  --返回 2013.02.17
         缩写:Year Yy···
查询执行顺序:
             --查询组合字段
             (5)select (5-2) distinct(5-3) top(<top_specification>)(5-1)<select_list>
             --连表
             (1)from (1-J)<left_table><join_type> join <right_table> on <on_predicate>
             (1-A)<left_table><apply_type> apply <right_table_expression> as <alias>
             (1-P)<left_table> pivot (<pivot_specification>) as <alias>
             (1-U)<left_table> unpivot (<unpivot_specification>) as <alias>
             --查询条件
             (2)where <where_pridicate>
             --分组
             (3)group by <group_by_specification>
             --分组条件
             (4)having<having_predicate>
             --排序
             (6)order by<order_by_list>

posted on 2017-03-27 10:34  QyonJ  阅读(155)  评论(0编辑  收藏  举报