15个常用的SQL Server高级语法
作者:网络转载 发布时间:[ 2015/8/28 11:27:01 ] 推荐标签:数据库
9.视图
优点:
筛选表中的行
防止未经许可的用户访问敏感数据
降低数据库的复杂程度
创建视图
create view v_Demo
as
select ......
10、局部变量
---------------------------------局部变量--------------------------
--声明变量:使用declare关键字,并且变量名已@开头,@直接连接变量名,中间没有空格。必须指明变量的类型,同时还可以声明多个不同类型的变量。
declare @name nvarchar(30) ,@age int
--变量赋值:
--1、使用set 给变量赋值,只能给一个变量赋值
set @age=18
set @name ='Tianjia'
select @age,@name --输出变量的值
--2、使用select 可以同时为多个变量赋值
select @age=19,@name='Laoniu'
--3、在查询语句中为变量赋值
declare @sum int =18 --为变量赋初值
select @sum= SUM(english) from Score --查询语句中赋值
select @sum --输出变量值
--4、变量作为条件使用
declare @sname nvarchar(10)='张三'
declare @sage int
select @sage=sage from student where sName=@sname
select @sage
--5、使用print输出变量值,一次只能输出一个变量的值,输出为文本形式
print @sage
11、全局变量
--------------------------全局变量(系统变量)----------------------------------
select * from student0
select @@error --后一个T-SQL错误的错误号
select @@max_connections--获取创建的同时连接的大数目
select @@identity --返回近一次插入的编号
12、事务
事务:同生共死
指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)–也是由多个sql语句组成,必须作为一个整体执行
这些sql语句作为一个整体一起向系统提交,要么都执行、要么都不执行
语法步骤:
开始事务:BEGIN TRANSACTION
事务提交:COMMIT TRANSACTION
事务回滚:ROLLBACK TRANSACTION
判断某条语句执行是否出错:
全局变量@@ERROR;
@@ERROR只能判断当前一条T-SQL语句执行是否有错,为了判断事务中所有T-SQL语句是否有错,我们需要对错误进行累计;
---------------------------模拟转账----------------------------
declare @sumError int=0 --声明变量
begin tran
update bank set balance=balance-1000 where cId='0001'
set @sumError=@sumError+@@error
update bank set balance=balance+1000 where cId='0002'
set @sumError=@sumError+@@error
if (@sumError=0)
commit tran --提交成功,提交事务
else
rollback tran --提交失败,回滚事务
13、存储过程
存储过程—像数据库中运行方法(函数)
和C#里的方法一样,由存储过程名/存储过程参数组成/可以有返回结果。
前面学的if else/while/变量/insert/select 等,都可以在存储过程中使用
优点:
执行速度更快 – 在数据库中保存的存储过程语句都是编译过的
允许模块化程序设计 – 类似方法的复用
提高系统安全性 – 防止SQL注入
减少网络流通量 – 只要传输 存储过程的名称
系统存储过程
由系统定义,存放在master数据库中
名称以“sp_”开头或”xp_”开头
创建存储过程:
定义存储过程的语法
CREATE PROC[EDURE] 存储过程名
@参数1 数据类型 = 默认值 OUTPUT,
@参数n 数据类型 = 默认值 OUTPUT
AS
SQL语句
参数说明:
参数可选
参数分为输入参数、输出参数
输入参数允许有默认值
EXEC 过程名 [参数]
----------------------例--------------------------
if exists (select * from sys.objects where name='usp_GroupMainlist1')
drop proc usp_GroupMainlist1
go
create proc usp_GroupMainlist1
@pageIndex int, --页数
@pageSize int, --条数
@pageCount int output--输出共多少页
as
declare @count int --共多少条数据
select @count =count(*) from [mainlist] --获取此表的总条数
set @pageCount=ceiling(@count*1.0/@pageSize)
select * from
(select *,row_number() over(order by [date of booking] desc) as 'num' from [mainlist]) as t
where num between(@pageSize*(@pageIndex-1)+1) and @pageSize*@pageIndex
order by [date of booking] desc
-------------------------------------------------------------------------------------------
--调用
declare @page int
exec usp_GroupMainlist1 1,100,@page output
select @page
14、常用函数
1)ISNULL(expression,value) 如果expression不为null返回expression表达式的值,否则返回value的值
2)聚合函数
avg() -- 平均值 统计时注意null不会被统计,需要加上isnull(列名,0)
sum() -- 求和
count() -- 求行数
min() -- 求小值
max() -- 求大值
3)字符串操作函数
LEN() --计算字符串长度
LOWER() --转小写
UPPER () --大写
LTRIM() --字符串左侧的空格去掉
RTRIM () --字符串右侧的空格去掉
LTRIM(RTRIM(' bb '))
LEFT()、RIGHT() -- 截取取字符串
SUBSTRING(string,start_position,length)
-- 参数string为主字符串,start_position为子字符串在主字符串中的起始位置(从1开始),length为子字符串的大长度。
SELECT SUBSTRING('abcdef111',2,3)
REPLACE(string,oldstr,newstr)
Convert(decimal(18,2),num)--保留两位小数
4)日期相关函数
GETDATE() --取得当前日期时间
DATEADD (datepart , number, date )--计算增加以后的日期。参数date为待计算的日期;参数number为增量;参数datepart为计量单位,可选值见备注。DATEADD(DAY, 3,date)为计算日期date的3天后的日期,而DATEADD(MONTH ,-8,date)为计算日期date的8个月之前的日期
DATEDIFF ( datepart , startdate , enddate ) --计算两个日期之间的差额。 datepart 为计量单位,可取值参考DateAdd。
-- 获取日期的某一部分 :
DATEPART (datepart,date)--返回一个日期的特定部分 整数
DATENAME(datepart,date)--返回日期中指定部分 字符串
YEAR()
MONTH()
DAY()
15、sql语句执行顺序
5>…Select 5-1>选择列,5-2>distinct,5-3>top
1>…From 表
2>…Where 条件
3>…Group by 列
4>…Having 筛选条件
6>…Order by 列
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
远程连接sql server 2000服务器的解决方案SQL Server修改数据库物理文件存在位置探讨SQL Server并发处理队列数据不阻塞解决方案迁移SQL Server到Azure SQL实战SQL SERVER 的前世今生?各版本功能对比SQL Server的WITH (NOLOCK)SQL Server如何用触发器捕获DML操作的会话信息SQL Server里书签查找的性能伤害监控SQL Server事务复制SQL Server数据库镜像下有效的索引维护SQL Server不停机移动镜像数据库SQL Server数据库备份压缩拷贝实例SQL Server数据库优化SQL SERVER的统计信息SQL Server里如何处理死锁SQL SERVER批量生成编号

sales@spasvo.com