zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    VOA 2009/11/02 DEVELOPMENT REPORT In Kenya, a Better Life Through Mobile Money
    2009.11.26教育报道在美留学生数量创历史新高
    Java中如何实现Tree的数据结构算法
    The Python Tutorial
    VOA HEALTH REPORT Debate Over New Guidelines for Breast Cancer Screening
    VOA ECONOMICS REPORT Nearly Half of US Jobs Now Held by Women
    VOA ECONOMICS REPORT Junior Achievement Marks 90 Years of Business Education
    VOA 2009/11/07 IN THE NEWS A Second Term for Karzai; US Jobless Rate at 10.2%
    Ant入门
    Python 与系统管理
  • 原文地址:https://www.cnblogs.com/shineqiujuan/p/1740709.html
Copyright © 2011-2022 走看看