在T—Sql中使用变量 一)局部变量 二)全局变量
2012-11-08 20:52
211 查看
一、在T—Sql中使用变量
(一)局部变量
1声明变量 @age和@name
declare @name varchar(20)
declare @age int
2赋值
--(1)方法1
set @age=18
set @name='yqq'
--(2)方法2
select @age=27
select @name='ydx'
3分别使用set和select 为行号变量@rcount赋值
declare @rcount int
set @rcount=(select COUNT(*) from Student)
select @rcount=COUNT(*) from Student
计算score表中english平均成绩,如果〉=60,查询正数前三名,否则找出倒数前三名。
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 @sum3 int =0
declare @j int =1
while @j<=100
begin
if @j%2=0
begin
set @sum3=@sum3+@j
end
set @j=@j+1
end
print @sum3
--6使用while实现如果english不及格的人超过半数,则给每个人增加2分,循环加,直到不及格的人数少于一半。
declare @count2 int =(select COUNT(*)from T_Score)
declare @loster int =(select COUNT(*) from T_Score where FEnglish<60)
declare @harfcount int=floor(@count2/2)
while @harfcount<@loster
begin
update T_Score set FEnglish=FEnglish+2 where FEnglish<60
set @loster=(select COUNT(*)from T_Score where FEnglish<60)
end
--7使用事务实现--转账问题:从0001账户转1000块到0002账户。
create table Bank
(
Cid char(4) primary key,
balance money
)
alter table Bank
add constraint CH_balance check (balance>=10)
insert into Bank values('0001',1000)
insert into Bank values('0002',10)
begin tran
begin try
declare @errorSum int =0
update Bank set balance=balance-1000 where Cid='0001'
set @errorSum=@errorSum+@@error
update Bank set balance=balance+1000 where Cid='0002'
set @errorSum=@errorSum+@@error
commit
print '提交!!'
end try
begin catch
rollback
print '回滚!'
end catch
--8打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)
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
(一)局部变量
1声明变量 @age和@name
declare @name varchar(20)
declare @age int
2赋值
--(1)方法1
set @age=18
set @name='yqq'
--(2)方法2
select @age=27
select @name='ydx'
3分别使用set和select 为行号变量@rcount赋值
declare @rcount int
set @rcount=(select COUNT(*) from Student)
select @rcount=COUNT(*) from Student
计算score表中english平均成绩,如果〉=60,查询正数前三名,否则找出倒数前三名。
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 @sum3 int =0
declare @j int =1
while @j<=100
begin
if @j%2=0
begin
set @sum3=@sum3+@j
end
set @j=@j+1
end
print @sum3
--6使用while实现如果english不及格的人超过半数,则给每个人增加2分,循环加,直到不及格的人数少于一半。
declare @count2 int =(select COUNT(*)from T_Score)
declare @loster int =(select COUNT(*) from T_Score where FEnglish<60)
declare @harfcount int=floor(@count2/2)
while @harfcount<@loster
begin
update T_Score set FEnglish=FEnglish+2 where FEnglish<60
set @loster=(select COUNT(*)from T_Score where FEnglish<60)
end
--7使用事务实现--转账问题:从0001账户转1000块到0002账户。
create table Bank
(
Cid char(4) primary key,
balance money
)
alter table Bank
add constraint CH_balance check (balance>=10)
insert into Bank values('0001',1000)
insert into Bank values('0002',10)
begin tran
begin try
declare @errorSum int =0
update Bank set balance=balance-1000 where Cid='0001'
set @errorSum=@errorSum+@@error
update Bank set balance=balance+1000 where Cid='0002'
set @errorSum=@errorSum+@@error
commit
print '提交!!'
end try
begin catch
rollback
print '回滚!'
end catch
--8打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)
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
相关文章推荐
- (转)不允许使用任何全局或局部变量编写 int strlen(char *strDest);
- SqlServer和Oracle中一些常用的sql语句4 局部/全局变量
- 使用Lua 局部变量来优化性能,同时比较局部变量和全局变量
- SqlServer和Oracle中一些常用的sql语句4 局部/全局变量
- IOS中 Block用法进阶二 局部变量和全局变量在Block中的使用
- 5章6节局部与全局使用同一个变量不同定义的调用
- c/c++中静态局部变量以及全局变量的使用(转)
- 简述static关键字的作用?(备注:在什么条件下使用static修饰局部变量、全局变量、函数)
- C++ 全局变量、静态全局变量、局部变量、静态局部变量使用归类
- C_ideas不允许调用库函数,也不允许使用任何全局或局部变量编写 int strlen(char *strDest);
- 5.1 Python 函数-默认参数,*args,**kwargs的使用;作用域-局部空间使用全局变量需要注意的事项等
- JS函数 -- 功能,语法,返回值,匿名函数,自调用匿名函数,全局变量与局部变量,arguments的使用
- SqlServer和Oracle中一些常用的sql语句4 局部/全局变量
- 正确得到线程退出信息的方法详解-变量存储退出信息结构、使用动态存储的方式退出信息结构、使用全局变量方式推相互信息结构、使用main函数中的局部变量存储退出信息结构
- javascript学习笔记(二):定义函数、调用函数、参数、返回值、局部和全局变量
- oracle 不能是用变量来作为列名和表名 ,但使用动态sql可以;
- 全局变量,静态局部变量,局部变量空间的堆分配和栈分配问题
- 使用sencha touch cmd 4.0 创建项目、打包(加入全局变量、公用类、自定义扩展、资源文件)
- c++ 全局 局部 静态 变量 区别
- 【使用Postman测试WEB接口】设置测试环境与全局变量