当前位置: 代码迷 >> SQL >> Sqlserver 函数/事宜/存储过程
  详细解决方案

Sqlserver 函数/事宜/存储过程

热度:621   发布时间:2016-05-05 14:38:41.0
Sqlserver 函数/事务/存储过程


--聚合函数
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也可以用在存储过程中,[email protected]_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'

  相关解决方案