MSSQL 局部变量与全局变量

来源:互联网 发布:华为手机记录运动数据 编辑:程序博客网 时间:2024/05/16 05:52
--一、变量分为:
--(1)局部变量:
--局部变量必须以标记@作为前缀,如@age
--局部变量的使用也是先声明,再赋值 

--变量语法:DECLARE   @变量名  数据类型

--DECLARE @name VARCHAR(10);
--DECLARE @age INT ;
 --   DECLARE @address VARCHAR(50);
    
    
    --给变量赋值:
    --SET @变量名 = 值 或  (单个赋值)
   
   --声明变量
 --   DECLARE @name VARCHAR(10);
--DECLARE @age INT ;
 --   DECLARE @address VARCHAR(50);
    
 --   --赋值
 --   SET @name='林鑫';
 --   SET @age=20;
    
 --   --输出结果
 --   PRINT @name;
 --   PRINT @age;
    
   
   -- SELECT  @变量名 = 值 (可以多个赋值,用“,”隔开)
     USE MySchool
     go
      
     --声明变量
    DECLARE @name VARCHAR(10);
DECLARE @age INT ;
    DECLARE @address VARCHAR(50);
    --赋值
    SELECT @name='李凤',@age=19,@address='杭州市西湖区BDQN';
    
    --输出结果
    SELECT @name 姓名,@age 年龄,@address 地址;
    
    
   --声明变量的同时赋值(一步到位)
    DECLARE @username VARCHAR(10)='sa',@no INT=1101;
   --输出结果
   -- SELECT @username 姓名,@no 编号;
    
    --???类型转换
    --PRINT @username+','+@no;


--案例1:T-SQL查找大白熊及他的相邻学号学生

SELECT *FROM student;


DECLARE @sno INT;
-- 第一步:找出“大白熊”的学号
SELECT @sno=studentno FROM student WHERE StudentName='大白熊';

--第二步:大白熊的学号加1或减1 
SELECT * FROM student WHERE StudentNo=@sno+1 OR StudentNo=@sno-1

--set与select区别
    --(1)select变量保持原值,set不支持;select支持
    --(2)表达式返回多个值时  set出错;select将返回的最后一个值赋给变量
     DECLARE @addr VARCHAR(20);
  --SELECT Address FROM student;
  --set出错
  --SET @addr=(SELECT Address FROM student)
   
  --select将返回的最后一个值赋给变量
  SELECT @addr=ADDRESS FROM dbo.Student;
  PRINT @addr;

--(3)select将返回的最后一个值赋给变量,set变量被赋NULL值;select变量保持原值
   DECLARE @addrs VARCHAR(20)='杭州市';
   --set变量被赋NULL值
   --SET @addrs=(SELECT Address FROM student WHERE 1<0)
   --SELECT @addrs;
   
   --select变量保持原值
   SELECT @addrs=ADDRESS FROM dbo.Student WHERE 1<0;
   SELECT @addrs;
   
   

--(2)全局变量:
--全局变量必须以标记@@作为前缀,如@@version
--全局变量由系统定义和维护,我们只能读取,不能修改全局变量的值 

SELECT @@SERVERNAME 服务器名称, @@VERSION 版本信息
 
--@@error=0没有错误;>0有错误
PRINT @@ERROR
 
SELECT * FROM student;
SELECT * FROM dbo.Grade;
 
--
INSERT INTO student(LoginPwd,studentname,Gender,GradeId,Birthday)
VALUES('123123','李凤',0,5,'1998-10-1')
 
--类型转换
--(1)CAST(表达式 AS 数据类型)


--PRINT '当前错误号:'+CAST(@@ERROR AS VARCHAR(20));
 
--(2)CONVERT(数据类型,表达式,样式 )
 PRINT '当前错误号:'+convert(VARCHAR(20),@@error);
 
 PRINT '日期:'+CONVERT(VARCHAR(20),GETDATE(),102);
 
 PRINT '日期:'+CONVERT(VARCHAR(20),GETDATE(),110);
 
 PRINT '日期:'+CONVERT(VARCHAR(20),GETDATE(),120);
 
 --CONVERT()与CAST() 的不同点是:可以指定转换的样式 




 
--案例2:查询学号是23214的学生参加2012年9月21日
     --的“Java ”课程考试的成绩,要求输出学生姓名和成绩
     
    SELECT * FROM student;
    SELECT * FROM dbo.Result;
    SELECT * FROM dbo.Subject;
     
     
     DECLARE @sid INT,@snames VARCHAR(20),@score INT;
-- 第一步:根据“Java ”课程找到课程编号
SELECT @sid=SubjectId FROM dbo.Subject  WHERE SubjectName='java'


--第二步:根据学号查出学生姓名
SELECT @snames=StudentName FROM student WHERE StudentNo=23214


--第三步:按照指定日期、学号和课程查询得到考试成绩
--学号是23214的学生参加2012年9月21日的“Java ”课程考试的成绩

SELECT @score=StudentResult FROM dbo.Result 
WHERE StudentNo=23214 AND ExamDate='2012-09-21' AND SubjectId=@sid

--第三步:输出学生的姓名和考试成绩
SELECT @snames 姓名,@score 考试成绩




-
0 0
原创粉丝点击