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 ] ] }

                    ]
                }
        } }
    }

 

注释:

 

操作selectset
(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

转载于:https://www.cnblogs.com/highfly2012/p/3204363.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值