1、定义变量简单赋值

  1.  
  1. declare @a int //声明一个变量a 赋初值为5
  2. set @a=
  3. print @a //输出变量a
  1. 2、创建临时表
  1. if OBJECT_ID('tempdb.#FlightState') is not null //如果存在先删除此表
  2. begin
  3. drop table #FlightState
  4. end
  5. CREATE TABLE #t //新建表
  6. (
  7. [ID] [int] NOT NULL,
  8. [Oid] [int] NOT NULL,
  9. [Login] [nvarchar]() NOT NULL,
  10. [Rtx] [nvarchar]() NOT NULL,
  11. [Name] [nvarchar]() NOT NULL,
  12. [Password] [nvarchar](max) NULL,
  13. [State] [nvarchar]() NOT NULL,
  14. )
  15. create table #FlightState(Calsign nvarchar(),[State] nvarchar(),ProcessTime datetime)
  1.  
  1.  
  1. 3、将查询结果集(多条数据)插入临时表
  1.  
  1. insert into #t select * from ST_User
  2. insert into #FlightState (Calsign,[State],ProcessTime) select p.Calsign,p.StripState,p.ProcessTime from #Table p where FlightId=@beofreTomsFlightId
  3.  
  4. select @beforeAtd=Atd,@beforeAta=Ata,@beforeCalsign=Calsign from #table where FlightId=@beforeFlightId
  5. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'',@beforeAtd)
  6.  
  7. SELECT * FROM #FlightState
  1.  
  1. 4、游标
  1. declare user_cur cursor for //定义游标
  2. open user_cur //打开游标
  3. while @@fetch_status=
  4. begin
  5. fetch next from user_cur into @ID,@Oid,@Login //读取下一条游标
  6. print @ID
  7. --print @Login
  8. end
  9. close user_cur
  10. deallocate user_cur //摧毁游标
  1. 5、实例
    1:把多表查询结果放入临时表
  1. USE [CDM]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[p_GetFlightProcess] Script Date: 2018/4/27 14:32:01 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER proc [dbo].[p_GetFlightProcess]
  9. @flightId int
  10. as
  11. begin
  12. declare @beforeFlightId int
  13. declare @beofreTomsFlightId int
  14. declare @tomsFlightId int
  15. declare @beforeAtd datetime
  16. declare @beforeAta datetime
  17. declare @beforeCalsign nvarchar()
  18. declare @lastCalsign nvarchar()
  19. declare @beforeState nvarchar()
  20. declare @beforeStateTime datetime
  21.  
  22. declare @calsign nvarchar()
  23. declare @borktime datetime
  24. declare @pocktime datetime
  25. declare @EIBT datetime
  26. declare @EOBT datetime
  27. declare @understart datetime
  28. declare @underend datetime
  29. declare @boardstart datetime
  30. declare @boardend datetime
  31.  
  32. --新建一个表如果已存在删除此表
  33. if OBJECT_ID('tempdb.#FlightState') is not null
  34. begin
  35. drop table #FlightState
  36. end
  37. create table #FlightState(Calsign nvarchar(),[State] nvarchar(),ProcessTime datetime)
  38.  
  39. --查询数据并插入到临时表中
  40. select @beforeFlightId=BeforFlightId,@beofreTomsFlightId=BeforTomsFlightId,@tomsFlightId=TomsFlightId from [AKIS].[dbo].[ValidFlight] where FlightId=@flightId
  41. select @beforeAtd=Atd,@beforeAta=Ata,@beforeCalsign=Calsign from [AKIS].[dbo].[ValidFlight] where FlightId=@beforeFlightId
  42. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'前序起飞',@beforeAtd)
  43. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'前序落地',@beforeAta)
  44.  
  45. --select @lastCalsign=Calsign,@beforeState=StripState,@beforeStateTime=ProcessTime from [CDM].[dbo].[StripStateChgLog] where FlightId=@beofreTomsFlightId
  46. --insert into #FlightState (Calsign,[State],ProcessTime) select p.Calsign,p.StripState,p.ProcessTime from [CDM].[dbo].[StripStateChgLog] p where FlightId=@beofreTomsFlightId
  47.  
  48. select @understart=UnderStartTime,@underend=UnderEndTime,@EIBT=EIBT from [188.10.34.19].[DataBase].[dbo].[FlightStationTimeArrival] where AkisFlightId=@beforeFlightId
  49. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'上轮档',@EIBT)
  50. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'开始下客',@understart)
  51. insert into #FlightState (Calsign,[State],ProcessTime) values (@beforeCalsign,'下客结束',@underend)
  52.  
  53. select @calsign=Calsign from [AKIS].[dbo].[ValidFlight] where FlightId=@flightId
  54. select @boardstart=BoardStartTime,@boardend=BoardEndTime,@borktime=BortTime,@pocktime=PockTime,@EOBT=EOBT from [188.10.34.19].[DataBase].[dbo].[FlightStationTime] where AkisFlightId=@flightId
  55. insert into #FlightState (Calsig n,[State],ProcessTime) values (@calsign,'开始登机',@borktime)
  56. insert into #FlightState (Calsign,[State],ProcessTime) values (@calsign,'开始上客',@boardstart)
  57. insert into #FlightState (Calsign,[State],ProcessTime) values (@calsign,'上客结束',@boardend)
  58. insert into #FlightState (Calsign,[State],ProcessTime) values (@calsign,'登机结束',@pocktime)
  59. insert into #FlightState (Calsign,[State],ProcessTime) values (@calsign,'撤轮档',@EOBT)
  60.  
  61. --insert into #FlightState (Calsign,[State],ProcessTime) select p.Calsign,p.StripState,p.ProcessTime from [CDM].[dbo].[StripStateChgLog] p where FlightId=@TomsFlightId
  62.  
  63. --print(@beforeFlightId)
  64. --print(@beofreTomsFlightId)
  65. --print(@tomsFlightId)
  66. SELECT * FROM #FlightState
  67. --SELECT @flightstate=(select FlightState from [188.10.34.19][DataBase].[dbo].[FlightStationTimeArrival] where FlighId = @flightId ),@borktime=ArrAddrName,@pocktime=Etd,@EIBT=Eta,
  68. end
  1.  

例2:循环匹配更新数据

  1. USE [ZHCCdb]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[P_FindFlightId] Script Date: 2018/4/27 14:14:38 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8.  
  9. ALTER proc [dbo].[P_FindFlightId]
  10. @Calsign nvarchar(),
  11. @Depaddr nvarchar(),
  12. @Arraddr nvarchar(),
  13. @MsgType nvarchar(),
  14. --起飞报的时候传deptime,落地arrtime
  15. @time datetime,
  16. @isDate bit
  17. AS
  18. BEGIN
  19. declare @timeDiff int
  20. set @timeDiff=
  21. declare @rtimeDiff int
  22. declare @etd datetime
  23. declare @eta datetime
  24. declare @flightId int
  25. declare @indexFlightId int
  26.  
  27. --定义一个游标查找FlightID
  28. declare cursor_FindFlight cursor for
  29. select top Etd,Eta,FlightId,Calsign from [188.10.34.13].[AKIS].[dbo].[ValidFlight] where Calsign=@Calsign and DepAddrName=@Depaddr and ArrAddrName=@Arraddr order by Etd Desc
  30. open cursor_FindFlight
  31. set @indexFlightId=
  32. fetch next from cursor_FindFlight into @etd,@eta,@flightId,@calsign
  33. while @@FETCH_STATUS=
  34. begin
  35. if(@MsgType='ARR')
  36. begin
  37. set @rtimeDiff = abs(datediff(MINUTE,@eta,@time))
  38. if @rtimeDiff < @timeDiff
  39. begin
  40. set @timeDiff = @rtimeDiff
  41. set @indexFlightId = @flightId
  42. end
  43. fetch next from cursor_FindFlight into @etd,@eta,@flightId,@calsign
  44. end
  45. else
  46. begin
  47. set @rtimeDiff = abs(datediff(MINUTE,@etd,@time))
  48. if @rtimeDiff < @timeDiff
  49. begin
  50. set @timeDiff = @rtimeDiff
  51. set @indexFlightId = @flightId
  52. end
  53. fetch next from cursor_FindFlight into @etd,@eta,@flightId,@calsign
  54. end
  55. end
  56. if @timeDiff >
  57. begin
  58. set @indexFlightId =
  59. end
  60. close cursor_FindFlight
  61. deallocate cursor_FindFlight
  62.  
  63. --定义临时表用于存放需要返回的数据
  64. if OBJECT_ID('tempdb.#Table') is not null
  65. begin
  66. drop table #Table
  67. end
  68. create table #Table (MsgType nvarchar(),FlightId int,Calsign nvarchar(),DepTime datetime)
  69. --根据@indexFlightId更新数据库数据
  70. if @indexFlightId !=
  71. begin
  72. if @MsgType='FPL'
  73. begin
  74. update [188.10.34.13].[AKIS].[dbo].[ValidFlight] set EOBT=@time,FplTime=GETDATE(),FplFlag= where FlightId=@indexFlightId
  75. end
  76. if @MsgType='DEP'
  77. begin
  78. update [188.10.34.13].[AKIS].[dbo].[ValidFlight] set Atd=@time,DepCreateTime=GETDATE(),DepFlag= where FlightId=@indexFlightId
  79. end
  80. if @MsgType='ARR'
  81. begin
  82. update [188.10.34.13].[AKIS].[dbo].[ValidFlight] set Ata=@time,ArrCreateTime = GETDATE(),ArrFlag= where FlightId=@indexFlightId
  83. end
  84. if @MsgType='DLA'
  85. begin
  86. update [188.10.34.13].[AKIS].[dbo].[ValidFlight] set Eta=@time where FlightId=@indexFlightId
  87. end
  88. if @MsgType='CNL'
  89. begin
  90. update [188.10.34.13].[AKIS].[dbo].[ValidFlight] set EOBT=' ',FplFlag= where FlightId=@indexFlightId
  91. end
  92. --找到这条数据时放入临时表中
  93. insert into #Table (MsgType,FlightId,Calsign,DepTime) values (@MsgType,@indexFlightId,@Calsign,@time)
  94. end
  95. else
  96. begin
  97. if @isDate=
  98. if @MsgType='ARR'
  99. begin
  100. insert into [ZHCCdb].[dbo].[DelayMsg](MsgType,Calsign,Depaddr,Arraddr,ArrTime,CreateTime) values (@MsgType,@Calsign,@Depaddr,@Arraddr,@time,GETDATE())
  101. end
  102. else
  103. begin
  104. insert into [ZHCCdb].[dbo].[DelayMsg](MsgType,Calsign,Depaddr,Arraddr,DepTime,CreateTime) values (@MsgType,@Calsign,@Depaddr,@Arraddr,@time,GETDATE())
  105. end
  106. end
  107. select * from #Table
  108. END

例3:定义游标循环表中数据

  1. USE [ZHCCdb]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[P_DelayMsg] Script Date: 2018/4/27 14:08:05 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. ALTER proc [dbo].[P_DelayMsg]
  9. as
  10. begin
  11. declare @MsgType nvarchar()
  12. declare @Calsign nvarchar()
  13. declare @Depaddr nvarchar()
  14. declare @Arraddr nvarchar()
  15. declare @Deptime datetime
  16. declare @ArrTime datetime
  17. declare @CreateTime datetime
  18. declare @DelayId int
  19. declare @flightId int
  20.  
  21. if OBJECT_ID('tempdb.#DelayMsgTable') is not null
  22. begin
  23. drop table #DelayMsgTable
  24. end
  25. create table #DelayMsgTable (Id int,MsgType nvarchar(),Calsign nvarchar(),Depaddr nvarchar(),Arraddr nvarchar(),DepTime datetime,ArrTime datetime,CreateTime datetime)
  26. --insert into #DelayMsgTable select * from [ZHCCdb].[dbo].[DelayMsg] p where DATEDIFF(HOUR,CreateTime,getdate())< order by CreateTime DESC
  27. insert into #DelayMsgTable (Id,MsgType,Calsign,Depaddr,Arraddr,DepTime,ArrTime,CreateTime)
  28. select top p.Id,p.MsgType,p.Calsign,p.Depaddr,p.Arraddr,p.DepTime,p.ArrTime,p.CreateTime from [ZHCCdb].[dbo].[DelayMsg] p where DATEDIFF(HOUR,CreateTime,getdate())< order by CreateTime DESC
  29.  
  30. --定义游标循环 #DelayMsgTable 数据
  31. declare cursor_DelayMsg cursor for
  32. select Id,MsgType,Calsign,Depaddr,Arraddr,Deptime,ArrTime,CreateTime from #DelayMsgTable
  33. open cursor_DelayMsg
  34. fetch next from cursor_DelayMsg into @DelayId,@MsgType,@Calsign,@Depaddr,@Arraddr,@Deptime,@ArrTime,@CreateTime
  35. while @@FETCH_STATUS=
  36. begin
  37. if @MsgType = 'ARR'
  38. begin
  39. exec [dbo].[P_FindFlightId] @Calsign,@Depaddr,@Arraddr,@MsgType,@ArrTime,'true'
  40. end
  41. else
  42. begin
  43. exec [dbo].[P_FindFlightId] @Calsign,@Depaddr,@Arraddr,@MsgType,@Deptime,'true'
  44. end
  45. fetch next from cursor_DelayMsg into @DelayId,@MsgType,@Calsign,@Depaddr,@Arraddr,@Deptime,@ArrTime,@CreateTime
  46. end
  47. close cursor_DelayMsg
  48. deallocate cursor_DelayMsg
    delete from [ZHCCdb].[dbo].[DelayMsg] where DATEDIFF(HOUR,CreateTime,getdate())> 24
    end
  1.  

SQL存储过程基础语法及实例的更多相关文章

  1. Sql Server 基础语法

    来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select  ...

  2. Sql server 存储过程基础语法

    一.定义变量 --简单赋值 declare @a int print @a --使用select语句赋值 declare @user1 nvarchar() select @user1='张三' pr ...

  3. SQL存储过程基础(从基础开始学,加油!)

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø ...

  4. SQL - 2.基础语法

    一.SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL—数据控制语言(GR ...

  5. [SQL] SQL SERVER基础语法

    Struct Query Language 1.3NF a.原子性 b.不能数据冗余 c.引用其他表的主键 2.约束 a.非空约束 b.主键约束 c.唯一约束 d.默认约束 e.检查约束 f.外键约束 ...

  6. SQL存储过程基础

    什么是存储过程呢?存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令. 通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句. 那为什么要用存储过程呢?1.存储过程只在创造时进行编译, ...

  7. [SQL] Oracle基础语法

    1.安装: oracle11g server 这里的口令为sys和system的密码.(10版本以前默认用户会有系统默认密码.) Oracle 11g 默认用户名和密码 oracle11g clien ...

  8. sql存储过程基本语法

    一.定义变量 --简单赋值 declare @a int print @a --使用select语句赋值 declare @user1 nvarchar() select @user1='张三' pr ...

  9. SQL数据库基础语法

    SQL语句的概述 SQL语言的分类 数据定义语言(Data Definition Language)主要用于修改.创建和删除数据库对象,其中包括CREATE  ALTER  DROP语句. 数据查询语 ...

随机推荐

  1. NetCore入门篇:(四)Net Core项目启动文件Startup

    一.Startup介绍 1.Startup文件是Net Core应用程的启动程序,实现全局配置. 2.Net Core默认情况下,静态文件及Session都未启动,需要在Startup文件配置启动,否 ...

  2. 机器学习、深度学习、和AI算法可以在网络安全中做什么?

    本文由  网易云发布. 本文作者:Alexander Polyakov,ERPScan的首席技术官和联合创始人.EAS-SEC总裁,SAP网络安全传播者. 现在已经出现了相当多的文章涉及机器学习及其保 ...

  3. pageadmin CMS网站制作教程:栏目单页内容如何修改

    pageadmin CMS网站制作教程:栏目单页内容如何修改 一般情况下,如公司介绍,联系方式等介绍内页面都属于单页,单页内容可以直接在栏目设置界面进行修改,如下 1.对栏目单页内容进行设置,登录后台 ...

  4. nginx 场景业务汇总 (初)

    本文链接:http://www.cnblogs.com/zhenghongxin/p/8891385.html 在下面的测试中,建议每次修改nginx配置文件后,都用此命令检查一下语法是否正确: [r ...

  5. docker存储volume

    #环境 centos7. , Docker version -ce docker volume创建.备份.nfs存储 #docker volume 数据存容器内,删容器即销毁全部数据 要保留的数据(数 ...

  6. JavaScript基础流程控制(3)

    day51 参考:https://www.cnblogs.com/liwenzhou/p/8004649.html for循环 while循环 三元运算 a>b条件成立,选a,不成立选b

  7. 基于SWOOLE的分布式SOCKET消息服务器架构

    消息服务器使用socket,为避免服务器过载,单台只允许500个socket连接,当一台不够的时候,扩充消息服务器是必然,问题来了,如何让链接在不同消息服务器上的用户可以实现消息发送呢? 要实现消息互 ...

  8. Python中的运算符与表达式

    你所编写的大多数语句(逻辑行)都包含了表达式(Expressions).一个表达式的简单例子便是 2+3.表达式可以拆分成运算符(Operators)与操作数(Operands).运算符(Operat ...

  9. 用 Python+nginx+django 打造在线家庭影院

    用 Python+nginx+django 打造在线家庭影院 2018年11月29日 08:46:59 清如許 阅读数:1528   我喜欢看电影,尤其是好的电影,我会看上三四遍,仔细感受电影带给我的 ...

  10. day 42 mysql 数据库(2)

    前情提要: 本节继续学习数据库   一:ddl 创建表 >字段名 >数据类型 >约束规则 >显示建表语句 修改表: 二:数据类型 >数值类型 >小数类型 >字 ...