一、局部变量的定义与赋值

定义语法:

-- 声明一个局部变量
DECLARE @变量名 数据类型 -- 声明多个局部变量
DECLARE @变量名1 数据类型1, @变量名2 数据类型2

赋值语法:

SET @变量名 = 值 或 SELECT @变量名 = 值

使用 Select 赋值确保筛选出的记录只有1条。

实际的使用例子:

比如我现在有一张学生表,内容如下。

我现在有个需求,查出马小李的前面一位同学和马小李后面的一位同学,这个需求就需要使用局部变量:

-- 定义2个变量,一个保存学号,一个保存姓名
declare @stuId int, @stuName varchar(20)
-- 给姓名变量赋值
set @stuName = '马小李'
-- 查出马小李的学号并保存在学号变量中
select @stuId = StudentId from Students where StudentName = @stuName
-- 查出马小李前后的学生信息
select * from Students where StudentId = (@stuId - 1) or StudentId = (@stuId + 1)

查询结果如下:

二、SET 和 SELECT 比较

使用场景 set select
同时对多个变量赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式未返回值时 变量被赋NULL值 变量保持原值

比如,根据上面的学员表,如下的使用方式有差异:

declare @stuAddress varchar(500), @stuName varchar(20)
-- set @stuAddress = '天津市南开区红磡公寓5-5-102', @stuName = '马小李' -- 不允许这样赋值
select @stuAddress = '天津市南开区红磡公寓5-5-102', @stuName = '马小李' -- 允许
-- set @stuAddress = (select StudentAddress from Students) -- 不允许
select @stuAddress = StudentAddress from Students -- 允许
set @stuAddress = (select StudentAddress from Students where 1 < 0) -- NULL值
select @stuAddress = StudentAddress from Students where 1 < 0 -- 保持原值

三、全局变量

全局变量都使用俩个@标志作为前缀。

全部变量的使用:

SQLServer —— 变量的使用的更多相关文章

  1. sqlserver 变量

    变量:分为全局变量和局部变量全部变量:以@@声明,为系统变量,所有实例都能访问,用户只能访问,不能赋值局部变量:生命周期只在一个批处理内有效, 局部变量经常使用的三种用途:1 在循环语句中记录循环的次 ...

  2. SqlServer变量

    MySql变量 => https://www.cnblogs.com/fanqisoft/p/10700669.html 全局变量 局部变量 ⒈全局变量 以@@开头,后面跟相应的字符串,全局变量 ...

  3. sqlserver变量的生周期

    在声明一个变量后,一旦遇到分号或者go,生命周期就结 DECLARE @num1 int --go ; --go print @num1; --print @num1:

  4. SQlServer 变量定义 赋值

    declare @id int declare @name char(10) ;注意:char(10)为10位,要是位数小了会让数据出错 set @id=1 select @id=1 select @ ...

  5. SQLSERVER存储过程语法详解

    CREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ...

  6. SQL 使用触发器常见错误

    今天做代码审查时,看见以下一段触发器的创建脚本,我们一起来分析一下 create trigger [trigger_puClassRoomType] on [dbo].[puClassRoomType ...

  7. 6 小时 Python 入门

    6 小时 Python 入门 以下操作均在 Windows 环境下进行操作,先说明一下哈 一.安装 Python 1.官网下载 Python 进入官网(https://www.python.org), ...

  8. sqlserver 视图能否有变量

    不能,sqlserver 视图一般不能有变量,也不能带存储过程

  9. sqlserver中表变量和变量表之间区别

    sqlserver中表变量和变量表之间区别

随机推荐

  1. json-server 和mock.js生成大量json数据

    JSON-server和mock.jsmock文件夹下 db.json db.jsjson-sever使用 安装:npm install json-server -g/mock 目录下执行json-s ...

  2. Django项目:CMDB(服务器硬件资产自动采集系统)--07--06CMDB测试Linux系统采集硬件数据的命令02

    #settings.py """ Django settings for AutoCmdb project. Generated by 'django-admin sta ...

  3. 19-10-24-H

    H H H H H H ZJ一下: T1只会暴力,测试点分治. (表示作者的部分分并没有给够,暴力加部分表按测试点分类可以得60吧……) T2先直接手玩第一个子任务. 然后就$Find$了一个神奇的( ...

  4. 《DSP using MATLAB》Problem 7.34

    代码: %% ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %% Output In ...

  5. 装饰者模式(Decorator、Compoment)(早餐销售装饰,动态添加职责)

    适用于以下情况: (1)需要扩展一个类的功能,或给一个类添加附加职责. (2)需要动态的给·一个对象添加功能,这些功能可以再动态的撤销. (3)需要增加由一些基本功能的排列组合而产生的非常大量的功能, ...

  6. 使用代码创建rabbitmq交换机和队列绑定

    1.获取channel对象 2.声明(创建)对列 // 第一个参数,queueName:对列名称.数据类型:String// 第二个参数,durable:是否持久化, 队列的声明默认是存放到内存中的, ...

  7. loj2324 「清华集训 2017」小 Y 和二叉树

    https://loj.ac/problem/2324 太智障,一开始以为中序遍历的第一个点一定是一个叶子,想了个贪心.然而,手算了一下,第一个点都过不了啊. input 5 2 3 4 1 3 3 ...

  8. CI框架 - Xhprof性能监控,用钩子hooks实现

    安装Xhprof参考:http://www.cnblogs.com/qq917937712/p/8889001.html 第一步:配置config.php $config['enable_hooks' ...

  9. loading遮罩

    .loading{ position: relative; cursor: default; point-events: none; text-shadow: none!important; colo ...

  10. char类型和int类型之间的转换

    在视屏课程第二章里,我们已经学习了一些常用的数据类型转换.然而,有一些时候我们会经常会遇到将char类型转换成int类型,或者需要将int类型转换为char类型的情况. 这里,我们来探讨一下这种不常用 ...