转自 : http://www.cnblogs.com/4mylife/archive/2012/10/25/2738466.html

下表列出 SET 与 SELECT 的区别

  SELECT SET
同时对多个变量同时赋值时 支持 不支持
表达式返回多个值时 将返回的最后一个值赋给变量 出错
表达式未返回值时 变量保持原值 变量被赋null值

(1).同时对多个变量同时赋值时

declare @a varchar(128), @b varchar(128)
SET @a='ABC',@b='EFG'
GO --报错:消息 102,级别 15,状态 1,第 3 行 ',' 附近有语法错误。

declare @a varchar(128), @b varchar(128)
SELECT @a='ABC',@b='EFG'
GO --正确运行

(2).表达式返回多个值时

在说明这一项前我们先创建一个要用到的表,并对其赋值,代码如下:

赋值测试表--fuzhiTEST

declare @name varchar(128)
set @name = (select name from fuzhiTEST)
GO  --报错:消息 512,级别 16,状态 1,第 2 行
                 子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

declare @name varchar(128)
select @name =name from fuzhiTEST
print @name
GO  --正确运行:显示 name3

(3).表达式未返回值时

declare @name varchar(128)
set @name = 'SET初始值'
set @name = (select name from fuzhiTEST where id = 4 )
print @name
GO   --正确运行:显示NULL

declare @name varchar(128)
set @name = 'SELECT初始值'
select @name = name from fuzhiTEST where id = 4
print @name --正确运行:显示 SELECT初始值
GO

注意:SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值(此时与使用 SET 赋值是完全相同的)。
对标量子查询的概念大家可能觉得陌生,下面举个例子说明下(对比上面绿色部分):

declare @name varchar(128)
set @name = 'SELECT初始值'
select @name =(select name from fuzhiTEST where id = 4 )
print @name --正确运行:显示NULL
GO

SQL中select与set的区别的更多相关文章

  1. SQL中select与set的区别-转载

    下表列出 SET 与 SELECT 的区别   SELECT SET 同时对多个变量同时赋值时 支持 不支持 表达式返回多个值时 将返回的最后一个值赋给变量 出错 表达式未返回值时 变量保持原值 变量 ...

  2. SQL中ON和WHERE的区别

    SQL中ON和WHERE的区别 - 邃蓝星空 - 博客园 https://www.cnblogs.com/guanshan/articles/guan062.html

  3. SQL中SELECT INTO和INSERT INTO SELECT语句介绍

    表复制是经常要用到的操作,下面就将为您介绍SQL中SELECT INTO和INSERT INTO SELECT语句,供您参考. Insert是T-sql中常用语句,Insert INTO table( ...

  4. SQL中存储过程和函数的区别

    转:https://www.cnblogs.com/jacketlin/p/7874009.html 本质上没区别.只是函数有如:只能返回一个变量的限制.而存储过程可以返回多个. 而函数是可以嵌入在s ...

  5. 面试问题 - SQL 中存储过程与函数的区别

    SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临 ...

  6. SQL中INEXISTS和IN 的区别和联系

    SET NOCOUNT ON , SET NOCOUNT OFF当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数).当 SET NOCOUNT 为 ...

  7. PL/SQL中SELECT总结

      一.SELECT 语句的各个关键词的顺序及作用简解(这个我简略点写~) 1.SELECT 2.FROM 3.WHERE 4.GROUP BY ---对结果集进行分组,通常与聚合函数一起使用 5.H ...

  8. 关于SQL中SELECT *(星号)的危害论

    听闻有许多人是禁止开发人员在SQL中使用SELECT *的,这里翻译一下StackOverflow的一篇提问,个人认为相当客观 [SELECT *]危害主要有以下几点: 给数据消费者传数据的低效.当你 ...

  9. sql中select into和insert into的区别

    select into主要是作用于没有新建表,在复制数据的时候新建 insert into主要作用于已经新建了一个表,直接把要复制的数据复制到新建好的表中

随机推荐

  1. Ansible之roles介绍

    本节内容: 什么场景下会用roles? roles示例 一.什么场景下会用roles? 假如我们现在有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务 ...

  2. anu - children

    import { _flattenChildren } from "./createElement"; export const Children = { only(childre ...

  3. jquery 实现内容的级联选取

  4. 内网dns劫持

    进行内网的dns劫持呢 ---> 我们需要用到ettercap 和ettercap内置的工具dns_spoof 1.我们需要开启ip转发 echo >/proc/sys/net/ipv4/ ...

  5. 高强度减脂Tabata练习

    每个动作20秒 动作间休息10秒 8个动作为一组 每次做四组 让你大汗淋漓全身酸爽 波比跳 ▼ 跳起箭步蹲 ▼ 登山者 ▼ 俯卧撑 ▼ 卷腹 ▼ 开合跳 ▼ 高抬腿 ▼ 俄罗斯转体 ▼ Bingo ▼ ...

  6. Redis学习第二课:Redis String类型及操作

    Strings类型 String是最简单的类型,一个Key对应一个Value,String类型是二进制安全的,可以包含任何数据,比如jpg图片或序列化的对象. Strings类型的操作: Set:设置 ...

  7. 移动端自动化openatx开源项目介绍,pytest并发测试框架结合

    开头 相信不少用过appium的同学,对于使用appium的一些体会与感受是否与我相似 1. appium启动服务和app程序非常慢 2. appium多线程并发需要启动多个服务 3. appium必 ...

  8. Windows 7 64bit Python 2 Install

    安装 setuptools 出现 UnicodeDecodeError 文件 Lib/mimetypes.py 中的 bug, 通过以下 patch 修复: Index: Lib/mimetypes. ...

  9. Ubuntu python-opcua Test

    /********************************************************************************* * Ubuntu python-o ...

  10. opencv-python教程学习系列4-opencv绘图函数

    前言 opencv-python教程学习系列记录学习python-opencv过程的点滴,本文主要介绍opencv绘图函数,坚持学习,共同进步. 系列教程参照OpenCV-Python中文教程: 系统 ...