11月8日

来源:互联网 发布:淘宝网购物女装夏装2015款 编辑:程序博客网 时间:2024/05/01 19:56

在T—Sql中使用变量
(一)局部变量
1声明变量  @age和@name
declare @name varchar(30)
declare @age int
2赋值
---(1)
-- set @age=20
--set @name='wang'
--select @age
--select @name
---(2)
select @age=20
select @name='wang'
print @age
print @name

--3分别使用set和select 为行号变量@rcount赋值
--计算score表中english平均成绩,如果〉=60,查询正数前三名,否则找出倒数前三名。
select avg(ENGLISH) FROM Score
select avg(isnull(ENGLISH,0))
FROM Score
declare @count int
select @count=COUNT(*) from Score
declare @sum float
select @sum=SUM(ENGLISH) FROM Score
declare @avg float
set @avg=(@sum/@count)
if @avg>=60
  begin
      select top 3 * from Score order by english desc
  end
else
  begin
      select top 3 * from Score order by english asc
  end

4.通过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
5通过while 计算1---100之间偶数的和。
declare @sum1 int =0
declare @i int =1
while @i<=100
begin
if @i%2<>1
begin
set @sum1=@sum1+@i
end
set @i=@i+1
end
print @sum1
6使用while实现如果english不及格的人超过半数,则给每个人增加2分,循环加,直到不及格的人数少于一半。
declare @count2 int =(select COUNT(*)from Score)
  declare @loster int=(select COUNT(*)from Score where english<60)
  declare @harfcount int=floor(@count2/2)
  while @harfcount<@loster
    begin
      update Score set english=english+2 where english<60
      set @loster=(select COUNT(*)from Score where english<60)
    end
7使用事务实现--转账问题:从0001账户转1000块到0002账户。
add constraint CH_balance check (balance>=10)
insert into Bank values('0001',10000)
insert into Bank values('0002',100)
update Bank set balance=balance-1000 where Cid='0001'
update Bank set balance=balance+1000 where Cid='0002'
8.打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)
egin tran
begin try
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
  print '回滚!'
end catch

9关闭“隐式事务”。
--如果隐式事务打开,然后删除某个表,在事务没有结束前,其它查询不能访问该表。

10使用系统存储过程
  给数据'Test'重命名为:'Test123'
exec sp_renamedb 'Test','Test123'
  查询当前数据库中有多少个表
exec sp_tables
  查询当前数据库中student表中的列信息
exec sp_columns 'Student'

11自定义存储过程 “usp_Helloworld”并使用。实现输出hello world!

create proc usp_Helloworld
as
begin
  print 'hello world!'
end

exec usp_Helloworld