--局部变量
--定义语法:
--declare @名称 类型=默认值
declare @age int=20
--select @age
print @age
--输出方式:
--select :输出为结果集,可以输出多列
--print :一次只能输出一个值,以文本形式输出,每一次的输出单独占据一行
select 1,1
print 1+1 print 2
go
--变量可以同时定义多个:
declare @age int=20,@name nvarchar(50)=‘aa‘
print cast(@age as char(3))+@name
--变量的赋值:如果通过独立子查询赋值,那么Set和select没有任何区别
--set:直接赋值
--select:通过查询赋值
go
--查询比 张三丰 年龄大的学员信息
declare @time datetime=(select BornDate from Student where StudentName=‘张三丰‘)
select * from Student where BornDate<@time
go
declare @time datetime
--set @time=(select BornDate from Student where StudentName=‘张三丰‘)
select @time=(select BornDate from Student where StudentName=‘张三丰‘)
select * from Student where BornDate<@time
go
--1.如果独立子查询返回的值不止一个: 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
--2.如果是多列值就会:当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
declare @time datetime
--set @time=(select BornDate from Student where StudentName=‘张三丰‘)
--select @time=(select BornDate from Student)
select @time=(select * from Student)
select * from Student where BornDate<@time
--区别:Set只能使用独立子查询赋值,但是select可以使用不完整的sql语句赋值,这种情况下,有三个区别
go
--1.Set不能同时为多个变量赋值 ,而select可以同时为多个变量赋值
declare @age int,@name nvarchar(50)
--set @age=20,@name=‘aa‘
select @age=20,@name=‘aa‘
print @age
print @name
go
--2.使用select赋值时,后面接不完整sql命令的时候,如果结果集返回了多行一列值那么select可以得到最后一个值
declare @age int,@name nvarchar(50)
--set @age=(select DATEDIFF(YY,BornDate,GETDATE()) from Student where StudentName=‘张三丰‘)
--set @age=(select DATEDIFF(YY,BornDate,GETDATE()) from Student)
select @age= DATEDIFF(YY,BornDate,GETDATE()) from Student order by StudentName-- where StudentName=‘张三丰‘
print @age
--3.如果接不完整sql语句返回了空结果集的时候,select保留原始的默认值(如果有的话)
go
declare @age int=20,@name nvarchar(50)=‘aa‘
--set @age=(select DATEDIFF(YY,BornDate,GETDATE()) from Student where StudentNo=100)
select @age=DATEDIFF(YY,BornDate,GETDATE()) from Student where StudentNo=100
print @age
--使用变量实现 :查询参加最近一次“office”考试成绩最高分和最低分: 将所有可能变化的值都存储到对应类型的变量中
declare @subjectName nvarchar(50)=‘c#‘ --科目名称
declare @subjectId int --科目ID
set @subjectId=(select SubjectId from Subject where SubjectName=@subjectName)--根据科目名称获取科目ID
declare @time datetime --指定科目最近一次考试日期
select @time =(select MAX(ExamDate) from Result where SubjectId=@subjectId) --获取指定科目最近一次考试日期
select MAX(StudentResult),MIN(StudentResult) from Result
where ExamDate=@time and SubjectId=@subjectId
--
go
declare @name char(5) --char类型如果没有定义长度那么长度为1
set @name=‘a‘--赋值的时候如果发现空间不够,那么会做自动的截取,多余的就抛弃
set @name=@name+‘q‘
print @name
go
declare @@@@#age int =100
print @@@@#age
select * from Student
select @@ROWCOUNT
--@@ERROR:可以获取最近一条sql命令的错误号
update Result set StudentResult=200 where StudentNo=10
--select * from Student
print ‘aa‘
select @@ERROR --如果错误号不为0说明当前这条语句出现错误,如果为0那么说明操作是成功的。
print @@SERVERNAME
print @@servicename
原文:http://www.cnblogs.com/dianshen520/p/4352008.html