- 浏览: 1763197 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (520)
- Oracle (10)
- Oracle错误集 (8)
- Oracle安装升级 (15)
- Oracle日常管理 (51)
- Oracle字符集 (7)
- Oracle备份恢复 (24)
- Oracle优化 (4)
- Oracle编程 (52)
- Oracle导入导出 (19)
- Oracle体系结构 (15)
- Oracle网络 (2)
- Oracle安全 (2)
- Oracle权限 (3)
- Oracle数据字典和性能视图 (2)
- Oracle常用地址 (5)
- SQLPLUS专栏 (7)
- SqlServer (13)
- SqlServer2005编程 (27)
- SqlServer2005管理 (15)
- MySQL (20)
- Dorado应用 (1)
- C# (24)
- Arcgis Server开发 (20)
- ArcSDE技术 (19)
- UML学习 (2)
- 设计模式 (2)
- JAVA EE (4)
- JavaScript (3)
- OFBIZ (27)
- JAVA WEB开发 (22)
- Linux&Unix (34)
- SHELL编程 (14)
- C语言 (11)
- 网络协议 (14)
- FREEMARKER (2)
- GROOVY (2)
- JAVA语言 (3)
- 防火墙 (0)
- PHP (2)
- Apache (2)
- Loader Runner (1)
- Nginx (3)
- 数据库理论 (2)
- maven (1)
最新评论
-
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
怼怼怼怼:
oracle的timestamp类型使用 -
pg_guo:
感谢
oracle中查看用户权限 -
xu234234:
5、MapResourceManager控件中添加了两个服务, ...
北京ArcGis Server应用基础培训笔记1
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT。
对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们
并没有注意,其实这两种方式还是有很多差别的。
SQL Server推荐使用 SET 而不是 SELECT 对变量进行赋值。
当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法。
下表列出 SET 与 SELECT 的区别。请特别注意红色部分。
set | select | |
同时对多个变量同时赋值 | 不支持 | 支持(如:select @a=1,@b=2,@c=3 ) |
表达式返回多个值时 | 出错 | 将返回的最后一个值赋给变量 |
表达式未返回值 | 变量被赋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
declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
--出错信息为
服务器: 消息 512,级别 16,状态 1,行 2
子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
*/
go
declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3
go
declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值
go
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
发表评论
-
SQL Server 2005中处理表分区问题
2008-08-28 11:01 2006数据库性能调优是每一 ... -
SQL LIKE 通配符随笔
2008-07-04 09:26 1600通配符 说明 _ 与任意单字符匹配 % 与包含一 ... -
五种提高 SQL 性能的方法
2008-07-02 12:10 1121有时, 为了让应用程序运行得更快,所做的全部工作就是在这里或那 ... -
SQL操作全集
2008-07-02 12:01 1106SQL分类: DDL—数据定义语言(CREATE,ALTER, ... -
不同服务器数据库之间的数据操作
2008-07-02 11:56 1909--创建链接服务器 exec sp_addlinkedser ... -
远程连接操作
2008-07-02 11:52 1277--远程连接操作 /******************** ... -
合并分拆表
2008-07-02 11:46 1445--合并分拆表 /********************** ... -
行列互转
2008-07-02 11:45 1380--行列互转 /*********************** ... -
T-SQL查询学习笔记——求下属和祖先的算法
2008-04-10 14:08 1891构建试验环境: CREATE TABLE dbo.Employ ... -
T-SQL查询学习笔记——数据修改
2008-04-10 11:45 2791一、插入数据 包括:select into、insert e ... -
T-SQL查询学习笔记——使用TOP和APPLY解决常见问题
2008-04-09 14:45 20671、每组中的TOP n问题 CREATE UNIQUE IND ... -
T-SQL查询学习笔记——TOP子句
2008-04-09 13:59 3201在select查询或表表达式中,top结合order by子句 ... -
T-SQL查询学习笔记——分组因子的使用示例
2008-04-08 17:27 1648IF OBJECT_ID('Stocks') IS NOT N ... -
T-SQL查询学习笔记——求中值的几种方法
2008-04-08 11:28 2755中值有两种定义: 1、当组中包含奇数个元素时,我们将直接返回中 ... -
Over 字句
2008-04-07 17:34 1518功能:确定在应用关联的窗口函数之前,行集的分区和排序。 适用 ... -
sql 的随机函数newID()和RAND()
2008-03-20 11:05 3053SELECT * FROM Northwind..Orders ... -
T-SQL查询学习笔记——已有范围和缺失范围示例代码
2008-03-19 15:30 1886USE SqlTest;GOIF OBJECT_ID('db ... -
T-SQL查询学习笔记——快速生成数字辅助表的几种方法示例代码
2008-03-19 14:17 2296------------------------------- ... -
SQL逻辑查询处理步骤
2008-03-14 17:22 17531、执行笛卡尔乘积(交叉联接) 2、应用ON筛选器(联接条件) ... -
Server 2005 中集合操作(UNION、EXCEPT、INTERSECT)
2008-03-14 16:32 1431集合操作在两个输入中比较全部行。 Union:返回 ...
相关推荐
首先,SQL Server官方推荐在对单个变量赋值时使用`SET`,因为它的行为更加明确和一致。`SET`语句一次只能为一个变量赋值,而且如果表达式不返回任何值,变量将保持其原始值。这意味着,如果尝试用`SET`给变量赋一个...
如果需要对多个变量赋值,需要使用多个 SET 语句。SELECT 则不同,它可以在一条语句中对多个变量同时赋值。 例如,假定有两个变量 @VAR1 和 @VAR2,使用 SELECT 可以这样赋值: SELECT @VAR1='Y',@VAR2='N' 而...
我们经常使用SET和SELECT来为变量赋值,但是有时候,只能选其一来使用,下面来看看这些例子,本例中使用AdventureWorks数据库来做演示。通过查询返回值:当你把查询返回的值付给变量时,SET将会接受这个结果(单值)...
SQL提供了几种不同的方式来给变量赋值: 1. **使用SET语句**: ```sql SET @variable_name = value; ``` 这里,`value`可以是常量、表达式或另一个变量的值。 2. **使用SELECT语句**: ```sql SELECT @...
及个人练习,总结两者有以下几点主要区别:假定有设定变量: 代码如下:DECLARE @VAR1 VARCHAR(1) DECLARE @VAR2 VARCHAR(2) 1、SELECT可以在一条语句里对多个变量同时赋值,而SET只能一次对一个变量赋值,如下: 代码...
而`SELECT`可以一次性给多个变量赋值,例如: ```sql DECLARE @NAME NVARCHAR(128), @AGE INT; SELECT @NAME = N'小明', @AGE = 18; ``` 3. **子查询赋值**:在使用子查询为变量赋值时,`SET`要求子查询必须...
为变量赋值通常使用`SET`语句,例如: ```sql DECLARE total_count INT DEFAULT 0; SET total_count = 10; ``` 这里将`total_count`的值设为了10。此外,`SELECT INTO`也可以用来将查询结果赋值给变量: ```sql ...
可以使用SET语句或SELECT语句为局部变量赋值。 例如,使用SET语句为局部变量赋值: DECLARE @var1 datetime SET @var1 = getdate() 使用SET语句将查询结果赋给局部变量: DECLARE @date_var datetime SET @date_...
本文将详细介绍如何利用`sp_executesql`来执行动态SQL,并重点讨论如何将执行结果赋值给变量,以及一些重要的注意事项。 #### 动态SQL与`sp_executesql` 动态SQL是指在运行时构建的SQL语句,这种类型的SQL可以在不...
1. **直接赋值**:使用`SET`语句来给变量赋值。它可以是常量、表达式,甚至可以是其他变量的值。例如: ```sql SET last = DATE_SUB(CURDATE(), INTERVAL 1 MONTH); ``` 2. **查询赋值**:当查询结果只有一行时...
在Oracle SQL*Plus环境中,可以通过`DEFINE`命令来显式地为变量赋值。例如: ``` DEFINE myv='King' ``` 这条命令创建了一个名为`myv`的字符型变量,并将其值设置为“King”。 ##### 2.2 使用ACCEPT命令接受输入 ...
也可以通过 SELECT 语句的选择列表中当前所引用值为变量赋值。 例如,下面的批处理声明一个变量、为它赋值并在 SELECT 语句的 WHERE 子句中予以使用: USE students GO DECLARE @NAME CHAR(8) SET @NAME='张三 ' ...
从DB中取检索值传递给shell,生成环境变量 1. 编写myshellpara.sql 通过spool 执行一个SQL读取所要的值,结果保存在myshellvar_export.sh set feedback off; set heading off; set pagesize 0; set linesize 1000; ...