T-SQL 高级编程
在Sql Server 中访问数据库一般有2种方式:
1、一种是使用应用程序编程接口API
2、数据库语句
变量:局部变量:以@为前缀,如@Age;全局变量以@@为前缀;(Ps:全局变量以系统定义和维护,只能读取,不能修改其值);
申明局部变量语法:DECLARE @变量名 数据类型;如:DECLARE @age INT
赋值:SET @变量名 = 值;或者 SELECT @变量名 = 值;例如:SET @age = 1;或 SELECT @age = stu_age FROM tb_stu Where stu_No = '123';(Ps:必须确保查询只有一条数据)
全局变量常见有:
对于许多应用程序的开发,都是一边在客户端进行程序开发,一边在数据库服务器端进行T-Sql编程;为了确保数据库的完整性,一般需要编写较为复杂的触发器、存储过程、自定义函数、游标、事务等
概述 :逻辑控制语句If...Else;
循环:While;
多分支:Case End 语法:
Case
When 条件1 Then 结果1
When 条件2 Then 结果2
Else 其他结果
End
批处理语句:批处理是包含一个或者多个的Sql语句组,从应用程序一次性的发往Sql Server执行;Sql Server将批处理语句编译成一个可执行单元,此单元叫做“执行计划”执行计划中的语句每次执行一条;如:
- select * FROM files
- select * from finance
- update files SET files.id = files.id +1
- where files.id = 1
- go
Go是批处理的标志,一般是将业务逻辑相关的业务操作语句,放置在同一撇中,由业务需求和代码编写者决定。
SQL Server 规定:建库,建表,存储过程,视图等必须在末尾加上Go批处理标志;
事务:单个逻辑操作单元,要么全部执行,要么全部都不执行;必须具有ACID属性:
(1)原子性(Atomicity):事务是一个完整的操作,事务的各步操作不不可分的(原子性),要么都执行,要么都不执行;
(2)一致性(Consistency):事务完成后,数据必保持一致性;
(3)隔离性(Isolation):对数据进行修改的所有并发事务是彼此隔离的,表明事务必须是独立的,并应该依赖和影响其他事务;
(4)永久性(Durability)事务完成后,对数据库的修改永久性的保存,事务日志能够保持事务的永久性。
- begin TRANSACTION //开始事务
- COMMIT TRANSACTION //提交事务
- ROLLBACK TRANSACTION //回滚事务
PS:当多条sql语句要组装在一起执行时候需要Begin和End起来,Begin和End必须成对出现,并且各占一行:
Begin
<T-SQL 命令或者程序块>
End
-------------------------------------------------
If Else 结构如下:
if(条件)
Begin
<T-SQL 命令或程序块>
End
Else
Begin
<T-SQL 命令或程序块>
End
备注:Else是可选部分
-------------------------------------------------
While 循环语句:
while(条件)
Begin
语句1
Continue
语句2
Break
End
注释:Break表示退出循环 ; Continue表示退出当前循环,继续下一次循环
- use transmate5
- DECLARE @sum INT,@i INT
- SET @i = 1
- SET @sum = 2
- WHILE(@sum<=100)
- SET @sum = @sum+@i;
- SET @i = @i+1
- END
- print '1-100为'+CONVERT(CHAR(6),@sum)
实例2:
- USE transmate5
- DECLARE @sum int,@i INT
- set @sum = 1
- set @i = 1
- while @sum<100
- BEGIN
- set @i = @i+1
- IF(@i%2=0)
- CONTINUE
- SET @sum = @sum+@i
- IF(@i=49)
- break
- end
- print ''
----------------------------------------------
Case End 多语句分支:
Case <条件判断表达式>
WHEN 条件判断表达式结果1 < WHEN T-SQL命令行或者语句块>
WHEN 条件判断表达式结果2 < WHEN T-SQL命令行或者语句块>
Else < WHEN T-SQL命令行或者语句块>
End
实例代码:
- SELECT
- files.id,
- files.fileurl,
- files.filename = CASE files.id
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- WHEN 12 THEN
- 'vb'
- ELSE '未知课程'
- END
- FROM files
- SELECT files.id , files.filename=
- case files.id
- WHEN 12 THEN 'VB'
- WHEN 13 then 'C#'
- else '未知课程'
- END
- files.fileurl,files.IsDown=
- case files.IsDown
- WHEN 1 THEN '已下载'
- ELSE '未下载'
- END
- from files
goto 语句:goto<标号>
- IF('' not in (select DISTINCT files.id from files))
- goto abc
- BEGIN
- print '学生成绩存在'
- select files.id,files.filename,files.filepath,files.fileurl
- FROM files WHERE filename=''
- end
- abc:print '没有学生成绩'
用户自定义函数,基本结构如下:(包括标量值函数,自定义函数、内嵌表值型函数、)
- create FUNCTION <函数名>
- ([{@参数名 输出参数类型[=默认值]}[,....]])
- RETURNS 函数返回值类型
- [WITH encryption]
- [AS]
- BEGIN
- 函数体
- RETURN 函数返回值
- end
- CREATE FUNCTION myFunction (@score INT) RETURNS VARCHAR (60) AS
- BEGIN
- RETURN
- CASE @score >= 90 AND @score <= 100 THEN '优秀'
- CASE @score >= 80 AND @score <= 90 THEN '良好'
- case @score >=70 and @score<=80 THEN '中等'
- case @score >=60 AND @score<=70 THEN '及格'
- else '不及格'
- end
- END
- SELECT files.id,files.filename,myFunction(score) from files
游标的使用:常常我们队数据的处理是数据行集合,但是有时候我们需要对单个数据行或者单独几行进行处理,这个时候,我们需要使用游标;
游标是以逐行的方式处理数据,可以看做一个指针,
- 声明游标:
- DECLARE 游标名 CURSOR FOR SELECT 语句
- 打开游标 使用Open语句填充该游标
- 读取游标 使用fetch语句,从数据行中检索特定的行
- 在打开一个游标后,它将被放在游标结果集的首行前,必须使用fetch语句访问该首行
- FETCH next from 游标名 into @变量名
- 关闭游标 使用Close语句关闭
- 删除游标 使用deallocate 删除游标引用
总结:
T-SQL 包括分支(if...Else和Case),循环(只有While一种,可以带Continue和Break),无条件跳转(goto)返回语句return;还提供了大量的系统函数
T-SQL 高级编程的更多相关文章
- Oracle SQL高级编程——分析函数(窗口函数)全面讲解
Oracle SQL高级编程--分析函数(窗口函数)全面讲解 注:本文来源于:<Oracle SQL高级编程--分析函数(窗口函数)全面讲解> 概述 分析函数是以一定的方法在一个与当前行相 ...
- oracle sql 高级编程 历史笔记整理
20130909 周一 oracle sql 开发指南 第7章 高级查询 1.层次化查询select level,ttt.*,sys_connect_by_path(ttt.col1,',') fro ...
- Oracle PL/SQL 高级编程
1. 复合数据类型--记录类型 Ø 语法格式 type 类型名 is record ( 字段1 字段1类型 [not null]:=表达式1; 字段2 字段2类型 [not n ...
- Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结
Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握常用的概念(ORM,IOC,AOP,event driv ...
- python高级编程之选择好名称:完
由于时间关系,python高级编程不在放在这边进行学习了,如果需要的朋友可以看下面的网盘进行下载 # # -*- coding: utf-8 -*- # # python:2.x # __author ...
- C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET
译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...
- C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...
- C# 6 与 .NET Core 1.0 高级编程 - 40 ASP.NET Core(下)
译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 40 章 ASP.NET Core(下)),不对的地方欢迎指出与交流. 章节出自<Professiona ...
随机推荐
- What is MEAN?
MEAN.JS is a full-stack JavaScript open-source solution, which provides a solid starting point for M ...
- java 死锁产生原因及解锁(转)
原文地址 进程死锁及解决办法 一.要点提示 (1) 掌握死锁的概念和产生死锁的根本原因. (2) 理解产生死锁的必要条件--以下四个条件同时具备:互斥条件.不可抢占条件.占有且申请条件.循环等待条件. ...
- activiti基础--3-----------------------------流程实例
一.流程实例用到的表: select * from act_ru_execution #正在执行的任务表 select * from act_hi_procinst #流程实例的历史表 select ...
- surf算法解析
surf构造的金字塔图像与sift有很大的不同,sift采用的是DOG图像,surf采用的是hessian矩阵行列式近似值图像,hessian矩阵是surf算法的核心,构建hessian矩阵的目的是为 ...
- 使用Imagemagick批量加水印缩小图片的脚本
安装Imagemagick首先要安装Imagemagick 本文HTML永久地址 doc CentOS上安装 yum install ImageMagick -yDebian上安装 apt-get i ...
- 用 Java 技术创建 RESTful Web 服务
JAX-RS:一种更为简单.可移植性更好的替代方式 JAX-RS (JSR-311) 是一种 Java™ API,可使 Java Restful 服务的开发变得迅速而轻松.这个 API 提供了一种基于 ...
- oracle 序列 + 触发器 实现 ID自动增长
1.创建序列 create sequence emp_sequence increment by ----每次增加几个 minvalue ----最小值为1 nomaxvalue----不限制最大值 ...
- vim 的复制粘贴命令,以及使用寄存器来存放要复制的内容;
一,y(yanks)复制,p(paste)粘贴: yy 复制当前行,2yy,复制2行: Y 复制整行:Y=yy; p 粘贴到光标后: P 粘贴到光标前: 注意vim会知道你复制内容的是整行还是一个矩 ...
- HTTPSQS(HTTP Simple Queue Service)消息队列
HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key ...
- 算法(Algorithms)第4版 练习 1.3.1
package com.qiusongde; import java.util.Iterator; import java.util.NoSuchElementException; import ed ...