加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

Sqlserver 函数/事务/存储过程

发布时间:2020-12-12 14:47:15 所属栏目:MsSql教程 来源:网络整理
导读:-- 聚合函数 use ?pubs go select ? avg ( distinct ?price)?? -- 算平均数 from ?titles where ?type = ' business ' go ? use ?pubs go select ? max (ytd_sales)?? -- 最大数 from ?titles go ? use ?pubs go select ? min (ytd_sales)? -- 最小数 from ?


--聚合函数

use?pubs

go

select?avg(distinct?price)??--算平均数

from?titles

where?type='business'

go?

use?pubs

go

select?max(ytd_sales)??--最大数

from?titles

go?


use?pubs

go

select?min(ytd_sales)?--最小数

from?titles

go?


use?pubs

go

select?type,sum(price),sum(advance)??--求和

from?titles

group?by?type

order?by?type

go?


use?pubs

go?

select?count(distinct?city)??--求个数

from?authors

go?


use?pubs

go

select?stdev(royalty)?--返回给定表达式中所有值的统计标准偏差

from?titles

go?


use?pubs

go

select?stdevp(royalty)?--返回表达式中所有制的填充统计标准偏差

from?titles

go?


use?pubs

go

select?var(royalty)?--返回所有值的统计方差

from?titles

go?


use?pubs

go

select?varp(royalty)?--返回所有值的填充的统计方差

from?titles

go?


--数学函数?


select?sin(23.45),atan(1.234),rand(),PI(),sign(-2.34)?--其中rand是获得一个随机数

--
配置函数

SELECT?@@VERSION?--获取当前数据库版本

SELECT?@@LANGUAGE?--当前语言

--
时间函数

select?getdate()?as?'wawa_getdate'?--当前时间

select?getutcdate()?as?'wawa_getutcdate'?--获取utc时间

select?day(getdate())?as?'wawa_day'?--取出天

select?month(getdate())?as?'wawa_month'?--取出月

select?year(getdate())?as?'wawa_year'?--取出年

select?dateadd(d,3,getdate())?as?wawa_dateadd?--加三天,注意'd'表示天,'m'表示月,'yy'表示年,下面一样

select?datediff(d,'2004-07-01','2004-07-15')?as?wawa_datediff?--计算两个时间的差

select?datename(d,'2004-07-15')?as?wawa_datename?--取出时间的某一部分

select?datepart(d,getdate())?as?wawa_datepart??--取出时间的某一部分,和上面的那个差不多

--
字符串函数

select?ascii(123)?as?'123',ascii('123')?as?'"123"',ascii('abc')?as?'"abc"'?--转换成ascii码

select?char(123),char(321),char(-123)?--根据ascii转换成字符

select?lower('ABC'),lower('Abc'),upper('Abc'),upper('abc')?--转换大小写

select?str(123.45,6,1),?str(123.45,2,2)?--把数值转换成字符串

select?ltrim('????"左边没有空格"')??--去空格

select?rtrim('"右边没有空格"?????')?--去空格

select?ltrim(rtrim('???"左右都没有空格"????'))?--去空格

select?left('sql?server',3),right('sql?server',6)?--取左或者取右?


use?pubs

select?au_lname,substring(au_fname,1,1)?--取子串

from?authors

order?by?au_lname?


select?charindex('123','abc123def',2)?--返回字符串中指定表达式的起始位置

select?patindex('123','abc123def'),patindex('%123%','abc123def')?--返回表达式中某模式第一次出现的起始位置

select?quotename('abc','{'),quotename('abc')?--返回由指定字符扩住的字符串

select?reverse('abc'),reverse('上海')?--颠倒字符串顺序

select?replace('abcdefghicde','cde','xxxx')?--返回呗替换了指定子串的字符串

select?space(5),space(-2)?


--系统函数

select?host_name()?as?'host_name',host_id()?as?'host_id',user_name()?as?'user_name',user_id()?as?'user_id',db_name()?as?'db_name'

--变量的定义使用

--
声明局部变量

declare?@mycounter?int

declare?@last_name?varchar(30),@fname?varchar(20),@state?varchar(2)?--一下声明多个变量

--
给变量赋值

use?northwind

go

declare?@firstnamevariable?varchar(20),

?
@regionvariable?varchar(30)

set?@firstnamevariable='anne'?--可以用set,也可以用select给变量赋值,微软推荐用set,但select在选择一个值直接赋值时很有用

set?@regionvariable?='wa'?


select?lastname,firstname,title??--用声明并赋值过的变量构建一个Select语句并查询

from?employees

where?firstname=?@firstnamevariable?or?region=@regionvariable

go

--全局变量

select?@@version??--返回数据库版本

select?@@error??--返回最后的一次脚本错误

select?@@identity??--返回最后的一个自动增长列的id?


--while,break,continue的使用

--
首先计算所有数的平均价格,如果低于30的话进入循环让所有的price翻倍,

--
里面又有个if来判断如果最大的单价还大于50的话,退出循环,否则继续循环,知道最大单价大于50就break出循环,呵呵,

--
我分析的应该对吧.

use?pubs

go

while?(select?avg(price)?from?titles)?<$30?

begin

?
update?titles

??
set?price=price*2

??
select?max(price)?from?titles

??
if(select?max(price)?from?titles)?>$50

??
break

??
else

??
continue

end

print?'too?much?for?the?marker?to?bear'?


--事务编程经典例子

--
begin?transaction是开始事务,commit?transaction是提交事务,rollback?transaction是回滚事务

--
这个例子是先插入一条记录,如果出现错误的话就回滚事务,也就是取消,并直接return(返回),如果没错的话就commit?提交这个事务了哦

--
上面的那个return返回可以返回一个整数值,如果这个值是0的话就是执行的时候没出错,如果出错了就是一个负数,

--
这个return也可以用在存储过程中,可用用?exec?@return_status=?pro_name来获取这个值

use?pubs

go

begin?tran?mytran

?
insert?into?stores(stor_id,stor_name)

??
values('333','my?books')

?
go

?
insert?into?discounts(discounttype,stor_id,discount)

??
values('清仓甩卖','9999',50.00)

?
if?@@error<>0

??
begin

???
rollback?tran?mytran

???
print?'插入打折记录出错'

???
return

??
end

commit?tran?mytran?


--事务处理的保存点示例

--
做了事务保存点后可以rollback(回滚)到指定的保存点,不至于所有的操作都不能用

use?pubs

go

select?*?from?stores

begin?transaction?testsavetran

?
insert?into?stores(stor_id,stor_name)

??
values('1234','W.Z.D?Book')

?
save?transaction?before_insert_data2

?
go

?
insert?into?stores(stor_id,stor_name)

??
values('5678','foreat?Books')

?
go

rollback?transaction?before_insert_data2

select?*?from?stores?


--存储存储过程

use?pubs

if?exists(select?name?from?sysobjects?where?name=?'proc_calculate_taxes'?and?type='P')

?
drop?procedure?proc_calculate_taxes

go

create?procedure?proc_calculate_taxes?(@p1?smallint=42,@p2?char(1),@p3?varchar(8)='char')

as

select?*

from?titles

--执行过程

EXECUTE?PROC_CALCULATE_TAXES?@P2='A'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读