zoukankan      html  css  js  c++  java
  • Sqlserver中Select和Set区别

     转载文章:http://blog.csdn.net/perddy/article/details/4033406

    select和set都可以对(使用 DECLARE @local_variable 创建的)局部变量进行赋值,但二者又有显著区别。

    SqlServer建议将 SET @local_variable 而不是 SELECT @local_variable 用于变量赋值

    语法:

    SELECT { @local_variable = expression } [ ,...n ]

    SET { { @local_variable = expression }
            | { @cursor_variable = {@cursor_variable | cursor_name
                    | { CURSOR [ FORWARD_ONLY | SCROLL ]
                        [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ]
                        [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ]
                        [ TYPE_WARNING ]
                    FOR select_statement
                        [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] }

                        ]
                    }
            } }
        }

     

    注释:

    操作 select set
    (1)同时对多个变量赋值 不支持 支持
    (2)表达式返回多个值 把结果集的最后一行值赋给变量 错误
    (3)表达式不返回值 保留变量的原来值(但如果表达式是不返回值的标量子查询,那么赋给变量的值为NULL) NULL

    表格中的(1)和(2)不难理解,下面对(3)进行举例说明

    1. declare @a varchar(50)  
    2. set @a='hello'  
    3. select @a=t1 from table1 where 1=2  


    因为select表达式没有返回值,所以此时@a的为‘hello’,也就是变量的原值。

    但如果换成标量子查询,再看看结果

    1. declare @a varchar(50)  
    2. set @a='hello'  
    3. select @a=(select top 1 t1 from table1 where 1=2)  


    此时@a的值就为NULL,如果把上面语句的select换成set,结果是一样的。

    1. declare @a varchar(50)  
    2. set @a='hello'  
    3. set @a=(select top 1 t1 from table1 where 1=2)  


    @a的值为NULL。

    结论:

    (1)如果是对单个变量赋值,建议采用set

    (2)如果对多个变量赋值,使用select

  • 相关阅读:
    Windows下使用Visual Studio Code搭建Go语言环境
    无缓冲和带缓冲channel的区别
    Asp.Net MVC如何返回401响应码
    从这里开始我的博客园
    java判定字符串中仅有数字和- 正则表达式匹配 *** 最爱那水货
    主席树
    Mybitis+springMVC 套路
    jeeplus ani 文档路径
    jquery easyui datagrid 多选只能获取一条数据
    python写入文件编码报错
  • 原文地址:https://www.cnblogs.com/highfly2012/p/3204363.html
Copyright © 2011-2022 走看看