SQL server数据库declare和set用法技巧

Posted 帝火流冰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL server数据库declare和set用法技巧相关的知识,希望对你有一定的参考价值。

        最近遇到一段不怎么看得懂的SQL语句,经过查阅资料,整理出来的有关数据拼接、数据库变量的一些内容如下:

如根据下述学生表,若要求得到年龄最大的学生信息:

学号15001150021500316004
姓名张三李四王丽薇姿
性别
年龄20201922

不使用变量的情况下,可用嵌套查询实现:

        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

参考技术A

@ 表示局部变量,@@ 表示全局变量


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用法技巧的主要内容,如果未能解决你的问题,请参考以下文章

sql server 游标循环插入数据

使用sql语句插入随机时间

sqlserver的varchar类型拼接的问题

sqlserver怎么建临时表?

sqlserver怎么建临时表?

PCB SQL Server 代码创建DbLink