sql server (数据库加强4)
来源:互联网 发布:淘宝商城推广培训 编辑:程序博客网 时间:2024/06/04 19:36
--在T-Sql中使用变量
--局部变量
--1.声明变量
declare @name varchar(20)
declare @age int
--2.赋值
--方法1
set @age=18
set @name='祁宏霞'
--方法2
select @age=18
select @name='祁宏梅'
print @age
print @name
--使用set和select为变量赋值的区别
declare @rcount int
set @rcount=(select COUNT(*)from TblStudent)--先查询,后赋值
select @rcount=COUNT(*)from TblStudent--既查询又赋值
print @rcount
select top 5 tsAge from TblStudent
declare @sAge int
--SET @sAge=(select sAge from Student)--出错!子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
select tsAge from TblStudent
select @tsAge=tsAge from TblStudent--当查询返回多值的时候,是把最后一个值赋值给变量
declare @Fage int --只定义,没赋值,因此为@Fagenull
set @Fage=@Fage+1
select @Fage--这里输出的就是null
declare @userName varchar(10)
declare @userAge int
set @userAge=18
set @userName='hd'
--select @userAge,@userName
print @userAge+cast(@userName as varchar(10))
print @userName+cast(@userAge as varchar(10))
--print输出的是某一种数据类型的数值
---------全局变量--
select * from TblStudent
insert into TblStudent(tSName,tSAge,tSGender,tSCardId)values('朝霞',33,'女',123456789)
print @@identity
print @@version
print @@language
print @@servername
print @@error--如果返回值为0,说明上一条语句没有错误!如果上一条语句出错,返回错误消息序号.
print 'hello word'+222
print @@error
-------------if else 条件语句---
declare @Hage int
set @Hage=50
if @Hage>10
begin
print '长大了'
end
else
begin
print '还小呢'
end
select * from TblScore
-----计算score表中english平均成绩,如果数>=60,查询正数前三名,否则找出倒数前三名
select AVG(english)from TblScore
--使用isnull()函数计算平均值
select avg(isnull(english,0))from TblScore
--练习使用变量计算平均值
declare @count int
select @count=COUNT(*)from TblScore
declare @sum float
select @sum=SUM(english)from TblScore
declare @avg float
set @avg=(@sum/@count)
if @avg>=60
begin
select top 3 * from TblScore order by english desc
end
else
begin
select top 3 * from TblScore order by english asc
end
print @avg
----练习题
if @avg>=60
begin
select top 3 * from TblScore order by english desc
end
else
begin
select top 3 * from TblScore order by english asc
end
-------while循环
---通过while计算1-100之间奇数的和.
declare @sum2 int=0
declare @i int=1
while @i<=100
begin
if @i%2<>0
begin
set @sum2=@sum2+@i
end
set @i=@i+1
end
print @sum2
--作业:通过while 计算1--100之间偶数的和.
--例题:如果english不及格的人超过半数,则给每个人增加2分,循环加,直到不及格的人数少于一半. --1.计算总人数
declare @count2 int=(select COUNT(*)from TblScore)
---2.计算英语不及格人数
declare @loster int=(select COUNT(*)from TblScore where english<60)
declare @harfcount int=floor(@count2/2)
while @harfcount<@loster
begin
update TblScore set english=english+2 where english<60
set @loster=(select COUNT(*)from TblScore where english<60)
end
select * from TblScore
update TblScore SET english=59 WHERE english IS NULL
---5.事务
--转帐问题
create table Bank
(
Cid char(4)primary key,
balance money
)
alter table Bank
add constraint CH_banlance check(balance>=10)
insert into Bank values('0001',1000)
insert into Bank values('0002',10)
select * from Bank
--- 假设要从0001账户转1000块到0002账户
update Bank set balance=balance-1000 where Cid='0001'
update Bank set balance=balance+1000 where Cid='0002'
--事务,就是把一系列操作作为一件事处理,要么都完成,要么都不完成
begin transaction---打开事务
begin try
begin tran--打开事务
declare @errorSum int =0
update Bank set balance=balance-900 where Cid='0001'
set @errorSum=@errorSum+@@error
update Bank set balance=balance+900 where Cid='0002'
set @errorSum=@errorSum+@@error
commit
print '提交!!'
end try
begin catch
rollback
prnt '回滚'
end catch
--if @errorSum=0
begin
commit tran
print '提交'
end
else
begin
rollback
print '回滚'
end
commit tran--提交事务
rollback tran--回滚事务
-----'自动提交事务':系统检测sql语句是否出错,如果没有错误就自动提交--
insert into Bank values('0003',1000)
--如果希望手动提交,可以回滚在执行插入等操作的时候:
begin tran--打开事务
insert into Bank values('0004',4200000)
rollback--手动回滚或提交事务
--commit
----隐式事务:默认情况为关,如果打开了则不自动提交学要手动提交
set implicit_Transactions on
delete from Bank
rollback
select * from Bank
--如果隐式事务打开,然后删除某个表,在事务没有结束前,其它查询不能访问该表。
--这就是“锁”,由于只是执行了一个sql的操纵,没有结束事务,就会把表锁住,不让别人在对他进行操作,放置并发问题出现
set implicit_Transactions off
---可以给事务起名,当多个事务存在时用以区分
begin tran tran1
rollback tran1
commit tran1
----如果没有打开的事务,执行rollback时,就会报错
-----六。存储过程!!!
-----与c#中的方法一样,存储过程有名/可以有参数/可以有返回值。
---6.1系统存储过程
--放在系统数据库 master 中的可编程性---存储过程---系统存储过程中
--select * from sys.databases
exec sp_databases
----sp_databases的 内部 代码
select
DATABASE_NAME = db_name(s_mf.database_id),
DATABASE_SIZE = convert(int,
case -- more than 2TB(maxint) worth of pages (by 8K each) can not fit an int...
when convert(bigint, sum(s_mf.size)) >= 268435456
then null
else sum(s_mf.size)*8 -- Convert from 8192 byte pages to Kb
end),
REMARKS = convert(varchar(254),null)
from
sys.master_files s_mf
where
s_mf.state = 0 and -- ONLINE
has_dbaccess(db_name(s_mf.database_id)) = 1 -- Only look at databases to which we have access
group by s_mf.database_id
order by 1
----使用 sp_helptext 来显示一个存储过程中的代码
exec sp_helptext sp_databases
exec sp_helptext sp_helptext
---给数据库重命名
exec sp_renamedb 'Test','Test123'
---查询当前数据库中有多少个表
exec sp_tables
---查询当前数据库中的列信息
exec sp_columns 'Student'
-------------------------------------------
--以上是几个系统的存储过程:以sp_开头,exec
--自定义存储过程一般是以 usp_开头
create proc usp_Helloworld
as
begin
print 'hello world'
end
exec usp_Helloworld
--创建一个计算2个数的和的存储过程
select * from Score
update Score set english=69 where english is null
update Score set english=22 where scoreId=9
---7个人一半按3算,7/2向下取正。
print floor(7/2.0)
print ceiling(7/2.0)
print 7/2
- sql server (数据库加强4)
- sql server 数据库加强3
- sql server 数据库加强习题
- sql server数据库加强练习题
- sql server数据库加强练习题3
- sql server语句加强
- sql server语句加强2
- 如何加强 SQL Server 2000 本地数据库的网络连接安全性
- SQL Server数据库应用之(4)
- sql-server数据库(基本概念)
- 使用sql维护数据库(SQL SERVER)
- SQL Server数据库备份(SQL 语句)!
- SQL加强(一)概念
- SQL加强(二)数据类型
- SQL Server 4个默认数据库
- C#访问数据库(SQL Server)
- sql server 数据库优化(转)
- C#访问数据库(SQL Server)
- CentOS初体验
- 博客搬家
- java--第十周--任务一 封装一类对象,功能是随机产生一个2000年后的年份,并输出该年2月的日历页,需处理闰年的问题
- Blocks与Dispatch Queue的使用
- 打通两台机器
- sql server (数据库加强4)
- 修改profile文件后进入不了系统的解决办法
- 在T—Sql中使用变量 一)局部变量 二)全局变量
- jsp指令
- Introduction to Algorithm(chapter 3 and 4)
- JSP元素
- 一周一总结(10)
- IE老是提示js有错误(缺少标识符或者字符串)
- JSP元素总结