SQL server数据库declare和set用法技巧
Posted 帝火流冰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server数据库declare和set用法技巧相关的知识,希望对你有一定的参考价值。
最近遇到一段不怎么看得懂的SQL语句,经过查阅资料,整理出来的有关数据拼接、数据库变量的一些内容如下:
如根据下述学生表,若要求得到年龄最大的学生信息:
学号 | 15001 | 15002 | 15003 | 16004 |
姓名 | 张三 | 李四 | 王丽 | 薇姿 |
性别 | 男 | 男 | 女 | 女 |
年龄 | 20 | 20 | 19 | 22 |
不使用变量的情况下,可用嵌套查询实现:
Select * from 学生表 where 年龄=(select max(年龄) from 学生表)
运用变量解决上述问题:
Declare @bianliang int;
Set @bianliang=(select max(年龄) from 学生表);
Select * from 学生表 where 年龄=@bianliang
面对实际工作中海量纷繁复杂的数据,使用嵌套或连接查询时很容易出现各种语句错误,此时可以通过引入变量的方式将数据之间的逻辑关系简单化、清晰化。
SQL Server中变量的使用主要涉及三方面的内容,即定义变量,为变量赋值以及结果的显示。
一、定义/声明变量
变量分为全局变量和局部变量,全局变量一般是系统内置的,用户使用时一般无法自行定义,实际工作中也只需要使用局部变量。定义变量的语句如下(定义多个变量时需用逗号隔开):
Declare @变量名1 数值类型,@变量名2 数值类型,@变量名3 数值类型,……
如:declare @i1 int,@i2 nvarchar(10),@i3 money,……
二、为变量赋值
可以使用set或select命令为变量赋值,可以直接将某个具体的值赋给变量,也可以将一个需要经过运算产生的查询结果赋给变量。
1.直接赋值
如声明变量:declare @bl1 int,@bl2 nvarchar(10),@bl3 money;
分别使用set和select分别为上述3个变量赋值:
set @bl1=100; set @bl2=’hello’ ; set @bl3=3.1415926 ;
或
Select @bl1=100, @bl2=’hello’,@bl3=3.1415926 ;
2.为变量赋一个需要运算产生结果的值
如声明变量:Declare @bl int;
以前文的学生表为例,分别使用set和select将学生表中学生年龄的最大值赋给变量@bl:
Set @bl=(select max(年龄) from学生表);
或
Select @bl=max(年龄) from 学生表;
3.set与select为变量赋值时的区别
直接赋值时set与select并无区别,只有所赋的值是一个查询结果时二者才有不同,当查询结果唯一时(如最大最小值),set和select都可以完成赋值,但是查询结果不止一个时使用set会提示错误。
如查询前文学生表中学生年龄:
Declare @bl int;
Set @bl=(select 年龄 from 学生表);
则变量@bl的赋值无法完成,因为学生表中年龄不止一条记录。而此时select命令仍可以产生结果。
Declare @bl int;
Select @bl=年龄 from 学生表;
此时变量@i的值为22,即表中最后一行年龄数据。这是因为select对变量的赋值方式是遍历数据中的全部记录,然后将最后一条记录赋给变量。
4.使用select命令为变量赋值的应用
了解了select为变量赋值时遍历全部数据的特性,用户可以运用变量将表中的一列记录变成一行值显示,仍以前文提到的学生表为例:
Declare @i varchar(100)
Set @i=’’
Select @i=@i+姓名 from学生表
此时变量@i的值为“张三李四王丽薇姿”。
这种方法在实际工作中可以结合存储过程运用,提高SQL语句执行效率。需要注意的是,若上例的学生表中“姓名”列有null值,则变量@i的值也是null,这是因为null与任何值进行运算结果都是null,此时需要通过isnull函数对null值进行调整。
三、显示结果
变量的结果有两种显示方式,即文本显示(print)和表格显示(select)两种.
SQL server 中 关于@和declare的解释,请看详细
返回三条学生信息
代码:
declare @n int //declare是什么意思? 是不是变量都要在前面加一个@符号来表示?为什么去掉@不行?
set @n=3
select top(@n) * from student
1.SQL server使用declare来声明局部变量。
语法:DECLARE @local_variable data_type
其中,local_variable为局部变量的名称,data_type为数据类型。
2.SQL server中的变量前面都要加@。
其中,局部变量以一个@符号开头,全局变量以两个@@符号开头(如:@@ERROR)。
3.@可以看作局部变量的一个标志,是一种规定,不可以去掉的。
上图是declare一个简单应用的例子。
扩展资料:
1.用declare进行声明的同时也可对变量赋初值,如:declare @id int = 3
2.SQL server中使用@@表示的全局变量,是系统预先定义的,我们写的sql语句不能创建、修改这些变量的值,只能读取。
参考资料:
百度百科——SQLServer
@ 表示局部变量,@@ 表示全局变量
DECLARE: 定义变量,变量第一个字母是“@”,声明时需要指定变量的类型。
declare @n int ,其中int是使用整数数据的精确数字数据类型,从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据。
扩展资料:
1、可以使用set和select对变量进行赋值,在sql语句中就可以使用@local_variable来调用变量声明中可以提供值,否则声明之后所有变量将初始化为NULL;
2、有的时候在查询更新数据库的时候,需要多条语句的查询,因此需要多次修改,declare可以满足多次执行,但数据只修改一次;
3、使用 +、-、*、/ 或 % 等算术运算符将 int、smallint、tinyint 或 bigint 常量值隐式或显式转换为float、real、decimal 或 numeric 数据类型时,SQL Server 计算数据类型和表达式结果的精度时应用的规则有所不同,这取决于查询是否是自动参数化的。
参考技术B 数据库脚本中:declare 变量定义,定义的变量需要以“@”符号开头。本回答被提问者采纳 参考技术C declare @sql varchar(500)
declare @a varchar(10)
select @a=convert(varchar(2),Day(getdate()))+'天'
set @sql='select ['+@a+'] from 视图名'
execute(@sql) 参考技术D 语法
DECLARE
@local_variable [AS] data_type
| @cursor_variable_name CURSOR
| @table_variable_name < table_type_definition >
[ ,...n]
@local_variable
变量的名称。变量名必须以 at 符 (@) 开头。局部变量名必须符合有关标识符的规则。有关详细信息,请参阅使用标识符作为对象名称。
data_type
系统提供的类型、CLR 用户定义类型或别名数据类型。变量不能是 text、ntext 或 image 数据类型。有关系统数据类型的详细信息,请参阅数据类型。有关 CLR 用户定义类型或别名数据类型的详细信息,请参阅 CREATE TYPE (Transact-SQL)。
以上是关于SQL server数据库declare和set用法技巧的主要内容,如果未能解决你的问题,请参考以下文章