-一、在T—Sql中使用变量
--(一)局部变量
--1声明变量 @[email protected]
declare @age int
declare @name nvarchar(50)
--2赋值
----(1)方法1
set @age=20
set @name='ll'
print @age
print @name
----(2)方法2
select @age=20
select @name='ss'
select @age,@name
--3分别使用set和select [email protected]值
use MySchool
declare @rcount int
--set @rcount=(select COUNT(*) from Student)
select @rcount=COUNT(*) from Student
print @rcount
--计算score表中english平均成绩,如果〉=60,查询正数前三名,否则找出倒数前三名。
declare @count int
select @count=COUNT(*) from Score
declare @sum int
select @sum=SUM(english) from Score
declare @avg int
select @avg=floor(@[email protected])
if @avg>=60
begin
select * from Score order by english desc
end
else
begin
select * from Score order by english asc
end
--4通过while 计算1---100之间奇数的和。
declare @sums int=0
declare @i int=1
while @i<=100
begin
if @i%2<>0
begin
set @sums+[email protected]
end
set @i+=1
end
print @sums
--5通过while 计算1---100之间偶数的和。
declare @sumss int=0
declare @j int=1
while @j<=100
begin
if @j%2=0
begin
set @sumss+[email protected]
end
set @j+=1
end
print @sumss
--6使用while实现如果english不及格的人超过半数,则给每个人增加2分,循环加
--直到不及格的人数少于一半。
select * from Score
insert Score (studentId,math) values (3,76)
select * from Score where english<60
declare @countEnglish int
set @countEnglish=(select COUNT(scoreId) from Score)
declare @loster int
set @loster=(select COUNT(*) from Score where english<60)
if @loster<@countEnglish
begin
update Score set english+=2 where english<60
set @loster=(select COUNT(*) from Score where english<60)
end
--7使用事务实现--转账问题:从0001账户转1000块到0002账户。
create table bank
(
sName nvarchar(50),
balance money
)
insert bank
select '001',1000 union
select '002',10
select * from bank
truncate table bank
begin transaction --打开事务
begin try
declare @countError int
update bank set balance-=900 where sName='001'
set @countError+=@@error
update bank set balance+=900 where sName='002'
set @countError+=@@error
commit --提交
print '提交'
end try
begin catch
rollback --回滚
print '回滚'
end catch
--8打开"隐式事务":设置为开,删除表中数据,回滚!
--(默认情况为关,如果打开了则不自动提交,学要手动提交)
select * from bank
begin tran--打开事务
insert into Bank values('0005',4200000)
rollback--手动回滚或提交事务
set implicit_transactions on
delete from bank
rollback
--9关闭“隐式事务”。
----如果隐式事务打开,然后删除某个表,在事务没有结束前,其它查询不能访问该表。
set implicit_transactions off
--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
--查询库名
exec sp_databases