`
vanadiumlin
  • 浏览: 500748 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

(转)SQL 中 SET 和 SELECT 有什么区别?

阅读更多

(转)SQL 中 SET 和 SELECT 有什么区别? SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种方式还是有很多差别的。 SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。 下表列出 SET 与 SELECT 的区别。请特别注意红色部分。 set select 同时对多个变量同时赋值 不支持 支持 表达式返回多个值时 出错 将返回的最后一个值赋给变量 表达式未返回值 变量被赋null值 变量保持原值 下面以具体示例来说明问题: create table chinadba1( userid int , addr varchar(128) ) go insert into chinadba1(userid,addr) values(1,'addr1') insert into chinadba1(userid,addr) values(2,'addr2') insert into chinadba1(userid,addr) values(3,'addr3') go 表达式返回多个值时,使用 SET 赋值 declare @addr varchar(128) set @addr = (select addr from chinadba1) /* --出错信息为服务器: 消息 512,级别 16,状态 1,行 2 子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。 */ go 表达式返回多个值时,使用 SELECT 赋值 declare @addr varchar(128) select @addr = addr from chinadba1 print @addr --结果集中最后一个 addr 列的值 --结果: addr3 go 表达式未返回值时,使用 SET 赋值 declare @addr varchar(128) set @addr = '初始值' set @addr = (select addr from chinadba1 where userid = 4 ) print @addr --null值 go 表达式未返回值时,使用 SELECT 赋值 declare @addr varchar(128) set @addr = '初始值' select @addr = addr from chinadba1 where userid = 4 print @addr --保持原值 go 需要注意的是,SELECT 也可以将标量子查询的值赋给变量,如果标量子查询不返回值,则变量被置为 null 值。此时与 使用 SET 赋值是完全相同的对标量子查询的概念大家应该都觉得陌生,举个例子就能说明 declare @addr varchar(128) set @addr = '初始值' --select addr from chinadba1 where userid = 4 为标量子查询语句 select @addr = (select addr from chinadba1 where userid = 4) print @addr --null值 go 转自:http://blog.csdn.net/shouyenet1/archive/2008/12/13/3511818.aspx

分享到:
评论

相关推荐

    SQL中SET和SELECT赋值的区别

    SQL 中 SET 和 SELECT 赋值的区别 SQL 中的赋值操作是数据库编程中非常重要的一部分,SET 和 SELECT 是两种常用的赋值方式,但是它们之间存在着一些关键的区别。本文将详细介绍 SET 和 SELECT 赋值的区别,并讨论...

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

    最近的项目写的SQL比较多,经常会用到对变量赋值,而我使用SET和SELECT都会达到效果。那就有些迷惑,这两者有什么区别呢?什么时候哪该哪个呢?经过网上的查询,及个人练习,总结两者有以下几点主要区别:假定有设定...

    在SQL SERVER 2000中实行简繁体转换

    在SQL SERVER 2000中进行简繁体转换是一个重要的功能,特别是在处理中文数据时。这个过程涉及到数据库设计和自定义函数的创建,以便在数据库中实现字符集的转换。下面将详细介绍如何在SQL SERVER 2000中执行简繁体...

    sqlserver存储过程中SELECT 与 SET 对变量赋值的区别

    总结来说,`SET`和`SELECT`在赋值上有以下几点不同: 1. `SET`一次只能赋值一个变量,且更严格,不允许返回多个值的表达式。 2. `SELECT`可以同时赋值多个变量,且在表达式返回多个值时取最后一个,无值时设为`NULL`...

    SQL Server 之 SET IDENTITY_INSERT

    ### SQL Server 中 SET IDENTITY_INSERT 的使用方法及注意事项 #### 标题与描述解析 在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)...

    sql server阿拉伯数字转大写中文存储过程

    SQL Server 是一个功能强大且广泛应用的关系数据库管理系统,而阿拉伯数字转大写中文是一个常见的需求,例如,在财务报表、发票printing等应用场景中,需要将阿拉伯数字转换为大写中文以满足特定的格式要求。...

    Update和Select结合使用

    在数据库管理与应用开发的过程中,经常会遇到需要对大量...通过上述分析可以看出,`UPDATE`与`SELECT`结合使用不仅可以简化复杂的数据库操作,还能有效提升处理效率,是数据库管理和应用程序开发中不可或缺的技术之一。

    T-SQL表的维护 select TOP的用法

    在SQL Server中,T-SQL(Transact-SQL)是用于管理、查询和操作数据库的一种语言。本文将详细介绍T-SQL中表的维护以及如何使用`SELECT TOP`子句来获取指定数量的记录。 #### 一、T-SQL表的操作基础 在进行表的维护...

    Oracle和SqlServer语法区别

    Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...

    Sql_set.zip_MYSQL

    6. **错误处理和日志记录**:为了方便调试,`Sql_set`可能会有内置的异常处理机制,并且能记录执行SQL语句时的日志,这对于追踪问题和优化性能至关重要。 7. **性能优化**:考虑到效率,`Sql_set`可能包含了一些...

    ORACLE和SQL Server的语法区别

    ### ORACLE和SQL Server的语法区别 #### 一、概述 本文主要介绍Oracle与SQL Server在SQL语言层面的异同之处,重点在于Transact-SQL(T-SQL)与PL/SQL之间的区别,并提供了一些迁移策略。对于希望将现有的Oracle...

    值对象转换成SQL语句

    例如,如果你有一个User值对象,包含id(int)、name(String)和email(String)等属性,你可以很容易地生成以下SQL语句: - INSERT: `INSERT INTO users (id, name, email) VALUES (?, ?, ?)` - SELECT: `SELECT * FROM...

    SQL SERVER中SELECT和SET赋值相同点与不同点(推荐)

    综上所述,了解`SELECT`和`SET`的区别有助于在编写SQL Server脚本时做出合适的选择。在实际应用中,应根据具体情况、性能需求和标准规范来决定使用哪种赋值方式。记得在开发过程中,始终确保代码的可读性和维护性,...

    PB脚本中SQL语句写法与SQL中语句写法对照

    PB脚本中SQL语句写法与SQL中语句写法对照是非常重要的知识点,因为PB脚本和SQL语言在写法和应用中有所不同。本文将对PB脚本中SQL语句写法和SQL中语句写法进行对比和分析。 一、Setfilter()函数中条件写法 在PB脚本...

    sql.rar_exec select_select_sql select from exec_普通sql大全

    Exec sp_executesql N select * from tableName -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg: declare @fname varchar(20) set @fname = FiledName Select @...

    Sql,oracle数据表行转列问题

    在SQL Server 2000中,我们可以使用CASE WHEN语句和MAX聚合函数来实现行转列操作。下面是一个示例代码: ```sql select 姓名 as 姓名, max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 ...

    sql 列转行

    set @sql = 'select Name as ' + '姓名' select @sql = @sql + ' , max(case Subject when ''' + Subject + ''' then Result else 0 end) [' + Subject + ']' from (select distinct Subject from tb) as a set @sql...

Global site tag (gtag.js) - Google Analytics