基于SQL中SET与SELECT赋值的区别详解

 更新时间:2013年06月05日 17:25:24   作者:  
本篇文章是对SQL中SET与SELECT赋值的区别进行了详细的分析介绍,需要的朋友参考下
最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果。
那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢?
经过网上的查询,及个人练习,总结两者有以下几点主要区别:
假定有设定变量:
复制代码 代码如下:

DECLARE @VAR1 VARCHAR(1)
DECLARE @VAR2 VARCHAR(2)

1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下:
复制代码 代码如下:

SELECT @VAR1='Y',@VAR2='N'
-- 而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

相关文章

  • mysql报1292 Incorrect datetime value错误的解决方法

    mysql报1292 Incorrect datetime value错误的解决方法

    这篇文章主要给大家介绍如何解决mysql报1292 Incorrect datetime value错误,文中有详细的解决方案,具有一定的参考价值,需要的同学可以参考阅读下本文
    2023-07-07
  • 连接mysql报错——没有设置“usessl=false”的问题

    连接mysql报错——没有设置“usessl=false”的问题

    这篇文章主要介绍了连接mysql报错——没有设置“usessl=false”的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • MySQL SQL语句优化的10条建议

    MySQL SQL语句优化的10条建议

    这篇文章主要介绍了MySQL中SQL语句优化需要注意的10点,,特别是大型高并发网站,需要的朋友可以参考下
    2014-03-03
  • MySQL 数据库优化的具体方法说明

    MySQL 数据库优化的具体方法说明

    以下的文章主要讲述的是实现MySQL数据库简单实用优化的具体方法,以及在实际操作中有哪些具体操作步骤是值得我们大家注意的。
    2010-05-05
  • MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)

    MySQL 8.0.19支持输入3次错误密码锁定账户功能(例子)

    这篇文章主要介绍了MySQL 8.0.19支持输入3次错误密码锁定账户功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • mysql密码过期导致连接不上mysql

    mysql密码过期导致连接不上mysql

    mysql密码过期了,今天遇到了连接mysql,总是连接不上去,下面有两种错误现象,有类似问题的朋友可以参考看看,或许对你有所帮助
    2013-05-05
  • MySQL子查询与HAVING/SELECT的结合使用

    MySQL子查询与HAVING/SELECT的结合使用

    这篇文章主要介绍了MySQL子查询在HAVING/SELECT字句中使用、及相关子查询和WITH/EXISTS字句的使用,具有一定的参考价值,感兴趣的可以了解一下
    2023-06-06
  • MySQL中SQL模式的特点总结

    MySQL中SQL模式的特点总结

    这篇文章主要给大家总结介绍了关于MySQL中SQL模式特点的相关资料,文章介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-09-09
  • 浅谈mysql哪些情况会导致索引失效

    浅谈mysql哪些情况会导致索引失效

    索引在我们使用MySQL数据库时可以极大的提高查询效率,然而,有时候因为使用上的一些瑕疵就会导致索引的失效,无法达到我们使用索引的预期效果,本文就介绍一下几种索引失效的方法
    2021-11-11
  • 修改MySQL的默认密码的四种小方法

    修改MySQL的默认密码的四种小方法

    对于windows平台来说安装完MySQL后,系统就已经默认生成了许可表和账户,下文中就教给大家如何修改MySQ的默认密码。
    2015-09-09

最新评论