SQL中SET和SELECT赋值的区别
最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果。
那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢?
经过网上的查询,及个人练习,总结两者有以下几点主要区别:
假定有设定变量:
DECLARE @VAR1 VARCHAR (1) DECLARE @VAR2 VARCHAR (2) |
1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下:

-- 而SET要达到同样的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
说到这个,SQL内置的变量:@@ERROR 和 @@ROWCOUNT必须要在一句SQL语句中捕获。如果用set分两句来获取它们,将获取不完整,这时就应该用select来获取值。
*/

2、表达式返回多个值时,用SET将会出错,而SELECT将取最后一个值,如下:
----以下假定Permission表有多个IsRight记录 SELECT @VAR1 = IsRight FROM Permission --将取最后一个值 SET @VAR1 = IsRight FROM Permission --将报错 |
3、表达式无返回值时,用SET将置变量值为NULL,用SELECT交保持变量值,如下:
----以下假定Permission记录为空 SET @VAR1 = '初始值' SELECT @VAR1 = IsRight FROM Permission --此时@VAR1为'初始值' SET @VAR1 = ( SELECT IsRight FROM Permission) --此时@VAR1为NULL |
4、使用标量子查询时,如果无返回值,SET和SELECT一样,都将置为NULL,如下:
----以下假定Permission记录为空 SET @VAR1 = '初始值' SELECT @VAR1 =( SELECT IsRight FROM Permission ) --此时@VAR1为NULL SET @VAR1 = ( SELECT IsRight FROM Permission) --此时@VAR1为NULL |
附上两篇参考文章:
1、http://hi.baidu.com/lovebeast/blog/item/309fc95484581c52d10906b9.html
2、http://www.cnblogs.com/jiajinyi/archive/2009/02/17/1392420.html (着重提到了标量子查询)
FROM : http://www.cnblogs.com/McJeremy/archive/2011/03/30/1999508.html
SQL中SET和SELECT赋值的区别的更多相关文章
- sql 中set和select区别
基于SQL中SET与SELECT赋值的区别详解 2012年09月06日 ⁄ 综合 ⁄ 共 912字 ⁄ 字号 小 中 大 ⁄ 评论关闭 最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET ...
- 通过set赋值,与select赋值的区别
---通过set赋值,与select赋值的区别.declare @a int--set @a=(select count(*) from TblStudent)select @a=count(*) f ...
- SQL Server中 SET 和 SELECT 赋值有什么区别?
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...
- sql server set赋值和select 赋值的区别以及使用方法
sqlserver存储过程中SELECT 与 SET 对变量赋值的区别 (备注:虽然变量赋值使用方法已经不是问题,但是,了解一下select和set赋值的区别,还是提高了不少认识.应该有很多人并不 ...
- SQL中的Join和Where的区别
一.sql语句中left join.inner join中的on与where的区别 0.各种join操作的概念和作用 left join :左连接,返回左表中所有的记录以及右表中连接字段相等的记录. ...
- SQL中join和cross join的区别
SQL中的连接可以分为内连接,外连接,以及交叉连接 . 1. 交叉连接CROSS JOIN 如果不带WHERE条件子句,它将会返回被连接的两个表的笛卡尔积,返回结果的行数等于两个表行数的乘积: 举例, ...
- SQL中instr和like的使用区别
1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...
- SQL中distinct 和 row_number() over() 的区别及用法
1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...
- SSM框架的sql中参数注入(#和$的区别)
<select id="findUsersByUserName2" resultType="java.util.Map" parameterType=&q ...
随机推荐
- ios合并静态库
lipo -create SQY/iOS/iphoneos/libGamePlusAPI.a SQY/iOS/iphonesimulator/libGamePlusAPI.a -output SQY/ ...
- 【2016-10-27】【坚持学习】【Day14】【GlobalAssemblyInfo 】
当一个解决方案,有多个项目时候,每一个项目的AssemblyInfo 都要写相同的东西.麻烦,因此使用GlobalAssemblyInfo 来统一管理. 实现如下: 在解决方案下增加一个文件夹以及Gl ...
- NOIP2003pj栈[卡特兰数]
题目背景 栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表. 栈有两种最重要的操作,即pop(从栈顶弹出一个元素)和push(将一个元素进栈). 栈的重要性不言自明,任何 ...
- 洛谷10月月赛Round.3
Rank11:260=60+100+100 P2409 Y的积木 题目背景 Y是个大建筑师,他总能用最简单的积木拼出最有创意的造型. 题目描述 Y手上有n盒积木,每个积木有个重量.现在他想从每盒积木中 ...
- BZOJ1798: [Ahoi2009]Seq 维护序列seq[线段树]
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 5504 Solved: 1937[Submit ...
- [随记]Eval的连接方法
在 .NET 3.5 及以下版本中,如下做法是错误的: <asp:Label ID="_column" runat="server" Text='栏目 I ...
- dwarf格式解析
debug_line中包含的是地址和源文件行之间的关系 我今天想搞清楚的是文件的C代码和汇编代码之间的关系: 对这块之前一直是迷迷糊糊的,发现这个问题已经严重影响到bug的定位了. 之前感觉C和汇编不 ...
- SSH加固
1.修改ssh默认端口 vi /etc/ssh/sshd_config 中Port:service ssh restart 2.安装denyhosts,应对暴力破解ssh. A.直接 apt-get ...
- LCM 轻量级通信组件
LCM和ZMQ比较 http://www.doc88.com/p-6711552253536.html 基于LCM和ZeroMQ的进程间通信研究 2.简介 LCM(Lightweight Commuc ...
- node.js的安装环境搭建
.header { cursor: pointer } p { margin: 3px 6px } th { background: lightblue; width: 20% } table { t ...