zoukankan      html  css  js  c++  java
  • SQL里面的变量的使用

    --局部变量
    --定义语法:
    --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

    人的本事不是与生俱来的,不是你掌握了多少,而是当你面对一个未知问题的时候,你能用多少时间来掌握!
  • 相关阅读:
    Eureka 系列(04)客户端源码分析
    Eureka 系列(03)Spring Cloud 自动装配原理
    Eureka 系列(02)Eureka 一致性协议
    Eureka 系列(01)最简使用姿态
    Feign 系列(05)Spring Cloud OpenFeign 源码解析
    python 线程,进程与协程
    Python IO多路复用
    python 作用域
    python 网络编程:socket(二)
    python 网络编程:socket
  • 原文地址:https://www.cnblogs.com/dianshen520/p/4352008.html
Copyright © 2011-2022 走看看