SQL中的全局变量和局部变量.
局部变量和全局变量
Print语句显示在消息框,select显示在网格框。
全局变量
print '所用SQL Server的版本信息'
print @@version
print ''
print '服务器名称为: ' @@servername
print '所用的语言为: ' @@language
go
Transact v 办理,交易,处理,谈判
二、全局变量
1、全局变量:全局变量是系统给定的局部变量;全局变量是SQL Server系统提供并赋值的变量。用户不能定义全局变量,也不能使用set语句来修改全局变量。
全局变量是一组特定的函数,它们的名称以@@开头,而且不需要任何参数,在调用时无需在函数名后面加上一对圆括号,这些函数也称为无参数函数。
日期函数:getdate()返回服务器的当前日期和时间、datename(日期元素,日期)返回指定日期的名字,返回字符串、datepart(日期元素,日期)返回指定日期的一部分,用整数返回、datediff(日期元素,日期1,日期2)返回两个日期间的差值并转换为指定日期元素的形式、dateadd(日期元素,数值,日期)将日期元素加上日期产生新的日期
print '今天的日期是: ' datename(yy,getdate()) '年' datename(mm,getdate()) '月' datename(dd,getdate()) '日'
select 日期=datename(yy,getdate()) '年' datename(mm,getdate()) '月' datename(dd,getdate()) '日'
局部变量与全局变量
data_type}[,.n] 其中local_varibale为局部变量 名,data_type为数据类型,可 一次声明多个局部变量。 局部变量声明后,就可以使用 SET语句或SELECT语句给其赋 值,其语法格式为:
SET @local_variable=expression 或 SELECT { @local_variable=expressi on}[,.n] 其中expression为任何有效的
SQL Server达式,也可为返回 单个数据的子查询结果。若子 查询无结果,则为NULL。
〖例5-4〗使用变量值查询 指定维修费用值的车辆的车牌 号、类别和启用年代。
USE traffic
DECLARE @myint int SET @myint=20000 SELECT车牌号, 类别, 启用 年代 FROM cl WHERE维修费用=@myint GO 如图5.4
SELECT驾照号, 姓名 FROM jsy WHERE籍贯=@mychar2 GO
执行结果如图5.5。
Байду номын сангаас
(二)全局变量 全局变量由系统提供,
以名称前头两字符‘@@’为标 识,区别于局部变量。TSQL语言中的全局变量作为 函数来引用,以下是常用的 全局变量: @@CONNECTION-返回试图
连接到本服务器的连接数目 @@ERROR-返回上一条TSQL语句执行后的错误号。 @@PROCID-返回当前存储过 程ID标识。 @@REMSERVER-返回登录 记录中远程SQL Server服务器
SQLServer基础教程
SQLServer基础教程
局部变量与全局变量
(一)局部变量 局部变量是一个可以保存单个 数据值的对象,常用于计数器 记录循环次数,保存运算的中 间结果,保存控制语句所需的 测试值,或保存由存储过
SQL程序设计试题A卷(附答案)
【答案】C
7、SQL语句中修改表结构的命令是。
A)MODIFY TABLE B)MODIFY STRUCTURE
C)ALTER TABLE D)ALTER STRUCTURE
【解析】SQL语句中ALTER TABLE用于修改表结构,即对指定表进行添加、修改、删除指定的字段;修改表结构命令MODIFY STRUCTURE不是SQL语句中的命令,它一般用于打开当前表的表设计器。
【答案】C
9、SQL语句中,DISTINCT短语的功能是。
A)按要求显示部分查询记录
B)消除重复出现的查询记录
C)删除查询结果中符合条件的记录
D)对ห้องสมุดไป่ตู้询结果进行排序
【解析】在SQL SELECT语句中,DISTINCT表示显示无重复结果的记录。
【答案】B
10、在SQL Server中,扩展名为.sql的文件是D。
【答案】D
5、SQL的数据操作语句不包括。
A)INSERT B)CHANGE
C)UPDATED)DELETE
【解析】数据操纵语言一般由插入记录命令INSERT、更新记录命令UPDATE、删除记录命令DELETE等组成。
【答案】B
6、SELECT-SQL语句中,条件短语的关键字为。
A)FOR B)FROM C)WHERE D)WITH
【解析】SQL的全称是Structured Query Language,中文名为结构化查询语言,又称关系数据库标准语言。
【答案】C
4、不属于数据定义功能的SQL语句为。
A)CREATE TABLE B)INSERT
SQL脚本-变量--转
SQL脚本-变量--转说明:现在市⾯上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作⽤于begin...end块中,⽽普通的变量定义和使⽤都说的⽐较少,针对此类问题只能在官⽅⽂档中才能找到讲解。
前⾔MySQL存储过程中,定义变量有两种⽅式:1、使⽤set或select直接赋值,变量名以@开头例如:set @var=1;可以在⼀个会话的任何地⽅声明,作⽤域是整个会话,称为⽤户变量。
2、以declare关键字声明的变量,只能在存储过程中使⽤,称为存储过程变量,例如:declare var1 int default 0;主要⽤在存储过程中,或者是给存储传参数中。
两者的区别是:在调⽤存储过程时,以declare声明的变量都会被初始化为null。
⽽会话变量(即@开头的变量)则不会被再初始化,在⼀个会话内,只须初始化⼀次,之后在会话内都是对上⼀次计算的结果,就相当于在是这个会话内的全局变量。
主体内容局部变量⽤户变量会话变量全局变量会话变量和全局变量叫系统变量。
⼀、局部变量,只在当前begin/end代码块中有效局部变量⼀般⽤在sql语句块中,⽐如存储过程的begin/end。
其作⽤域仅限于该语句块,在该语句块执⾏完毕后,局部变量就消失了。
declare语句专门⽤于定义局部变量,可以使⽤default来说明默认值。
set语句是设置不同类型的变量,包括会话变量和全局变量。
局部变量定义语法形式declare var_name [, var_name]... data_type [ DEFAULT value ];例如在begin/end语句块中添加如下⼀段语句,接受函数传进来的a/b变量然后相加,通过set语句赋值给c变量。
set语句语法形式set var_name=expr [, var_name=expr]...; set语句既可以⽤于局部变量的赋值,也可以⽤于⽤户变量的申明并赋值。
declare c int default 0;set c=a+b;select c as C;或者⽤select …. into…形式赋值select into 语句句式:select col_name[,...] into var_name[,...] table_expr [where...];例⼦:declare v_employee_name varchar(100);declare v_employee_salary decimal(8,4);select employee_name, employee_salaryinto v_employee_name, v_employee_salaryfrom employeeswhere employee_id=1;⼆、⽤户变量,在客户端链接到数据库实例整个过程中⽤户变量都是有效的。
SQL Server 2008 数据库案例教程课后习题答案
《SQL Server 2008数据库案例教程》练习题及模拟试卷答案第1章一、判断题1. 数据库技术是是计算机数据处理与信息管理系统的核心。
(√)2. 数据是用于描述现实世界中具体事物或抽象概念,可存储的数字符号。
(×)3. 数据库是一个长期存储在计算机内的、有组织的、有共享的、统一管理的数据集合。
(√)4. 数据库管理系统是一个按数据结构来存储和管理数据的服务器管理系统。
(×)5. 关系数据库,是建立在关系模型基础上的数据库。
(√)二、单选题1. 数据(Data)是一些可存储并具有明确意义的(A)A. 符号B.图形C.文字D.数字2. 人工阶段计算机用于数值计算,没有操作系统及管理数据的软件。
这一阶段的年代是(C)A. 19世纪80年代B. 20世纪20年代C.20世纪50年代D. 20世纪80年代3. 在网页中常用的图像格式是(D)A..bmp和.jpgB..gif和.bmpC. .png和.bmpD. .gif和.jpg4.数据库系统的重要特征是什么?(D)A. 数据的独立性和动态性 B.数据的静态性和独立性C.数据的动态性和共享性 D.数据的独立性和共享性三、多选题1.与数据库技术密切相关的基本概念有(ABCD)A. 数据B. 数据库C. 数据库管理系统D. 数据库系统2.数据库可分为哪几种类型?(ABC)A. 关系型数据库B. 网状数据库C. 层次数据库D.树形数据库3. DBMS提供数据操作语言DML,为用户提供了哪些操作?(ABCD)A.数据的追加B.数据的删除C.数据的更新D.数据的查询4.DBMS要分类组织、存储和管理各种数据,包括哪些内容?(ABC)A. 数据字典B. 用户数据C. 存取路径D.服务器5. 目前,DBMS常见品牌有哪些公司?(ABC)A.微软公司的SQL Server B.IBM公司的DB2 C.甲骨文公司的ORACLE D.索尼公司的MySQL四、填空题1.数据库(管理)技术经历了人工管理阶段和文件管理阶段。
《数据库系统原理》复习题(答案)
(一)填空题1.数据管理经历了_______阶段、________阶段到________阶段的变迁。
(手工管理、文件管理、数据库管理)2.实体之间联系的基本类型有______、_______、_______。
(一对一、一对多、多对多)3.在E-R图中,用____表示实体,用______表示联系,用______表示属性。
(矩形框、菱形框、椭圆框)4.数据库的三层模式结构是________、_________、_______。
(外模式、逻辑模式、内模式)5.关系模型中一般讲数据完整性分为三类:_________、___________、__________。
(实体完整性、参照完整性、用户定义完整性)6.数据模型由三部分组成:数据结构、数据操作和____________。
(数据的约束条件或数据完整性规则)7.SQL语言是一种标准的数据库语言, 包括数据的查询、定义、操纵和______四部分功能。
(控制)8.视图是从其它________或视图导出的虚表。
(基本表)9.在关系模式R 中,若属性或属性组X 不是关系R 的关键字,但X 是其他关系模式的关键字,则称X 为关系R 的___________。
(外关键字)10.访问SQL server数据库对象时,需要经过身份验证和_________两个阶段,其中身份验证分为Windows验证模式和_______验证模式。
(权限验证、混合)11._______是存储在文件中的一系列SQL语句,即一系列按顺序提交的批处理。
(脚本)12.SQL语言中行注释的符号为_________;块注释的符号为_________。
(--、/**/)13.SQL server中的变量分为两种,全局变量和局部变量。
其中全局变量的名称以_______字符开始,有系统定义和维护。
局部变量以__________字符开始,由用户自己定义和赋值。
(@@、@)14.在SQL server中,其权限分为三类,即_________权限、_________权限和_________权限。
SQL流程控制语句
延时语句 WAITFOR
WAITFOR语句可以将它之后的语句在一个指定的时 间间隔之后执行,或在未来的某一指定时间执行。
WAITFOR {DELAY ‘延时时间’ | TIME ‘到达时间
’}
必须是datetime数据类型,
--五秒钟后显示“时间到!”但不能包含日期部分
WAITFOR DELAY '0:00:05' 不超过24小时 PRINT ‘时间到!’
循环语句 WHILE
WHILE Boolean_expression --布尔表达式,进行条件判断 { sql_statement | statement_block } [BREAK] --跳出本层循环 { sql_statement | statement_block } [CONTINUE] --跳出本次循环 { sql_statement | statement_block }
练习:计算从1加到100并输出结果。
DECLARE @sum100 int, @i int SET @sum100=0 SET @i=0 WHILE @i<=100
BEGIN SET @sum100=@sum100+@i SET @i=@i+1
END PRINT @sum100
下列语句实现的什么功能
WHILE( SELECT AVG(Degree)
FROM Score
--计算3-105课的平均成绩
WHERE Cno=‘3-105’ )<85
BEGIN
UPDATE Score
SET Degree= Degree+5 WHERE Cno='3-105'
--将3-105课的成绩提高5分
sql server变量参数
sql server变量参数摘要:1.SQL Server 变量参数简介2.局部变量与全局变量3.变量数据类型4.变量声明与赋值5.变量使用示例6.参数传递7.参数化查询8.总结正文:SQL Server 变量参数是SQL Server 中用于存储和操作数据的一种机制。
它们可以在存储过程、触发器、用户自定义函数以及普通的SQL 语句中使用。
变量参数的使用可以提高代码的可读性、可维护性和可重用性。
在SQL Server 中,变量参数分为局部变量和全局变量。
局部变量仅在存储过程、触发器或函数内部可见,而全局变量在整个数据库实例中可见。
局部变量在声明时不需要使用@符号,而全局变量需要。
局部变量的作用域仅限于其所在的存储过程、触发器或函数,而全局变量的作用域从其声明位置开始,直到整个脚本结束。
在SQL Server 中,变量参数的数据类型包括:bit、int、smallint、bigint、decimal、numeric、float、real、money、smallmoney、char、varchar、text、ntext、image、varbinary、xml 等。
根据实际需求选择合适的变量数据类型。
变量声明与赋值是变量参数的基本操作。
在SQL Server 中,可以使用CREATE PROCEDURE 或ALTER PROCEDURE 语句声明局部变量。
声明时需要指定变量的数据类型、名称和作用域。
赋值操作可以使用SET 或SELECT 语句完成。
在SQL Server 中,变量参数可以通过以下方式使用:- 在表达式中使用:例如SELECT @变量名。
- 在条件表达式中使用:例如IF @变量名= "值"。
- 在循环中使用:例如WHILE @变量名<> "值"。
- 在事务处理中使用:例如BEGIN TRANSACTION @变量名= "值"; COMMIT;参数传递是在SQL Server 中使用变量参数的重要功能。
SQL复习题(附部分答案)
SQL复习题(附部分答案)⼀、单选题1.根据关系数据基于的数据模型——关系模型的特征判断下列正确的⼀项:(___)A.只存在⼀对多的实体关系,以图形⽅式来表⽰。
B.以⼆维表格结构来保存数据,在关系表中不允许有重复⾏存在。
C.能体现⼀对多、多对多的关系,但不能体现⼀对⼀的关系。
D.关系模型数据库是数据库发展的最初阶段。
答案[B]2、在“连接”组中有两种连接认证⽅式,其中在(___)⽅式下,需要客户端应⽤程序连接时提供登录时需要的⽤户标识和密码。
A、Windows⾝份验证B、SQL Server ⾝份验证C、以超级⽤户⾝份登录时D、其他⽅式登录时答案[B]3、关系数据库中,主键是(___),当运⽤Transact-SQL语句创建主键时,可以是(__)。
⑴ A、为标识表中唯⼀的实体 B、创建唯⼀的索引,允许空值C、只允许以表中第⼀字段建⽴D、允许有多个主键的⑵ A、create table table1(column1 char(13) not null primary key,column2 int not on primary key;B、alter table table1 with nocheck addconstraint [PK_table1] primary key nonclustered ( column1) on primary;C、alter table table1 column1 primary key ;答案[ A C]4、视图是⼀种常⽤的数据对象,可以简化数据库操作,当使⽤多个数据表来建⽴视图时,不允许在该语句中包括(___)等关键字。
A、ORDER BY,COMPUTEB、ORDER BY,COMPUTE,COMPUTR BYC、ORDER BY,COMPUTE BY,GROUP BYD、GROUP BY,COMPUTE BY答案[B ]5、在Transact-SQL语法中,SELECT语句的完整语法较复杂,但⾄少包括的部分(_1_),使⽤关键字(_2_)可以把重复⾏屏蔽,将多个查询结果返回⼀个结果集合的运算符是(_3__),如果在SELECT语句中使⽤聚合函数时,可以在后⾯使⽤⑴ A、SELECT,INTO B、SELECT,FROMC、SELECT,GROUPD、仅SELECT⑵ A、DISTINCT B、UNION C、ALL D、TOP⑶ A、JOIN B、UNION C、INTO D、LIKE⑷ A、GROUP BY B、COMPUTE BY C、HAVING D、COMPUTE 答案[B A B A ]6、SQL Server 2008是⼀个()的数据库系统。
sqlserver中局部变量与全局变量的申明与赋值(转)
sqlserver中局部变量与全局变量的申明与赋值(转)局部变量⽤⼀个@标识,全局变量⽤两个@(常⽤的全局变量⼀般都是已经定义好的);申明局部变量语法:declare @变量名数据类型;例如:declare @num int;赋值:有两种⽅法式(@num为变量名,value为值)set @num=value; 或 select @num=value;如果想获取查询语句中的⼀个字段值可以⽤select给变量赋值,如下:select @num=字段名 from 表名 where ……中变量不⽤事前申明,在⽤的时候直接⽤“@变量名”使⽤就可以了。
第⼀种⽤法:set @num=1; 或set @num:=1; //这⾥要使⽤变量来保存数据,直接使⽤@num变量第⼆种⽤法:select @num:=1; 或 select @num:=字段名 from 表名 where ……注意上⾯两种赋值符号,使⽤set时可以⽤“=”或“:=”,但是使⽤select时必须⽤“:=赋值”在sql中,我们常常使⽤临时表来存储临时结果,对于结果是⼀个集合的情况,这种⽅法⾮常实⽤,但当结果仅仅是⼀个数据或者是⼏个数据时,还要去建⼀个表,显得就⽐较⿇烦,另外,当⼀个sql语句中的某些元素经常变化时,⽐如选择条件,(⾄少我想)应该使⽤局部变量。
当然ms sql server的全局变量也很有⽤。
> > > > 局部变量声明:declare @local_variable data_type@local_variable 是变量的名称。
变量名必须以 at 符 (@) 开头。
data_type 是任何由系统提供的或⽤户定义的数据类型。
变量不能是text、ntext 或 image 数据类型。
⽰例:use masterdeclare @sel_type char(2)declare @sel_cunt numeric(10)set @sel_type = 'u '/*user table*/set @sel_cunt = 10/*返回系统中⽤户表的数⽬*/select @sel_cunt = count(*)from sysobjectswhere type = @sel_typeselect @sel_cunt as 'user table ' 's count '如果要返回系统表的数⽬,可以⽤set @sel_type = 's '可能这个例⼦并不能说明使⽤变量的好处,我只是想说明使⽤⽅法。
SQL期末复习题三
SQL期末复习题三SQL期末复习(三)一、填空题1、SQL Server索引分为_簇索引_、_非簇索引__类型。
2、实体之间的联系可以归结为一对一联系,一对多(或多对多)的联系与多对多联系,如果一个学院有许多教师,而一个教师只归属于一个学院,则实体集学院与实体集教师的联系属于______一对多___________的联系。
3、Transact-SQL中的变量分为局部变量与全局变量,局部变量用_@_ 开头,全局变量用_@@__开头4、字符型包括_定长字符型_和_变长字符型_两种类型。
前者称为固定长度字符型,后者称为可变长度字符型。
5、数据库系统模型主要有三类:概念模型、物理模型、逻辑模型。
6、E-R方法的三要素是_实体型_、__属性_ 、__联系_。
7、SQL语言中,删除一个表的命令是______drop table__________。
8、__数据库__是按照一定的数据模型组织的,长期存储在计算机内,可为多个用户共享的数据的集合。
9、触发器有3种类型,即insert类型、update类型、delete类型10、函数datediff(year,?1998-10-12?, ?2005-1-17?)的执行结果是(7);11、函数lower('CHINA')的执行结果是(china)。
12、数据库备份的方式有那四种(完全数据库备份)(事务日志备份)(差异备份)(文件和文件组备份))13、用SELECT进行模糊查询时,可以使用_like_或_not like_匹配符,但要在条件值中使用__’%’__或_’_’___等通配符来配合查询。
并且,模糊查询只能针对字段类型是__字符型数据__的查询14、计算字段的累加和的函数是:__sum()_,统计项目数的函数是:_count()_。
二、选择题2. SQL Server的字符型系统数据类型主要包括(B)。
A. Int、money、charB. char、varchar、textC. datetime、binary、intD. char、varchar、int4、在SELECT语句的WHERE子句的条件表达式中,可以匹配0个到多个字符的通配符是(B)A.*B.%C.-D.?5、SELECT语句中与HA VING子句同时使用的是(C)子句。
总结一下SQL的全局变量
总结⼀下SQL的全局变量SQL Server 2008中的全局变量及其⽤法T-SQL程序中的变量分为全局变量和局部变量两类,全局变量是由SQL Server系统定义和使⽤的变量。
DBA和⽤户可以使⽤全局变量的值,但不能⾃⼰定义全局变量。
下⾯详细总结⼀下SQL Server 2008中的33个全局变量,并且写⼀下⽰例.@@CONNECTIONS返回 SQL Server ⾃上次启动以来尝试的连接数,⽆论连接是成功还是失败。
返回类型 integer备注:@@MAX_CONNECTIONS 是允许同时连接到服务器的最⼤连接数。
@@CONNECTIONS 随每次登录尝试⽽增加,因此@@CONNECTIONS 可以⽐ @@MAX_CONNECTIONS ⼤。
⽰例:SELECT GETDATE() AS 'Today''s Date and Time',@@CONNECTIONS AS 'Login Attempts'Today's Date and Time Login Attempts---------------------- --------------@@CPU_BUSY返回 SQL Server ⾃上次启动后的⼯作时间。
其结果以 CPU 时间增量或“滴答数”表⽰,此值为所有 CPU 时间的累积,因此,可能会超出实际占⽤的时间。
乘以 @@TIMETICKS 即可转换为微秒。
返回类型 integer⽰例:SELECT @@CPU_BUSY * CAST(@@TIMETICKS AS FLOAT) AS 'CPU microseconds',GETDATE() AS 'As of' ;CPU microseconds As of---------------- -----------------------@@CURSOR_ROWS返回连接上打开的上⼀个游标中的当前限定⾏的数⽬。
T-SQL变量
T-SQL语言基础
T-SQL 中可以使用两种变量: -局部变量(Local Variable) -全局变量(Global Variable)。
T-SQL语言基础
1.局部变量
局部变量是用户可自定义的变量,它的作用范围仅在程序内部,在程序中 通常用来储存从表中查询到的数据或当作程序执行过程中暂存变量使用。 局部变量必须以@开头,而且必须用Declare命令声明后才可使用,其说明 形式如下: Declare @变量名 变量类型 [, @变量名 变量类型…]
数据库基础
THale Waihona Puke SQL语言基础给变量赋值,必须使用Select或Set命令来设定变量的值。其语法 Select @局部变量=变量值 Set @局部变量=变量值 【例6-3】 声明一个长度为10个字符的变量ID并赋值。 Declare @ID char(10) Select @ID = '10010001'
如下。
T-SQL语言基础
2.全局变量
全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于 某一程序,而是任何程序均可随时调用。全局变量通常存储一些SQL Server的配置设定值和效能统计数据,用户可在程序中用全局变量来测试 系统的设定值或T-SQL命令执行后的状态值。
系统定义的全局变量以两个@开头
Transact-SQL流程控制语句
例-- IF...ELSE语句
if (select count(*) from T_opt,T_lesson where and T_opt.Lid=T_lesson.Lid and lname=‘数据库原理' and score>80)<>0 begin print ‘有高于80分的数据库原理课程成绩!' select s.sid, s.sname,o.score from T_student s join T_opt g on s.sid=o.sid join T_lesson l on l.Lid=o.Lid where o.score<80 and l.lname='数据库原理' end else print ‘数据库原理课程的分数均低于80分'
6 GOTO语句:移动到指定行,标号不能用数字定 义。 7 RETURN 语句:无条件地终止一个查询、存 储过程或者批处理。位于RETURN语句之后的 程序将不会被执行。
打印数字11
declare @var1 int SET @var1=1 Here: set @var1=@var1+1 if @var1>10 begin print @var1 return end else goto Here
1 BEGIN...END语句
相当于C语言中的大括号或复合语句,它将多条T-SQL语句 封装成为一个整体的语句块。通常把BEGIN...END语句放在 语句IF...ElSE或者WHILE中,使其中的语句作为一个整体来 执行。
BEGIN T-SQL END
语句块
T-SQL中可以使用嵌套的BEGIN...END语句。
例:打印从1到4这4个数字
sqlserver2016教程【最新资料】
第七章Transact-SQL编程第一节变量(1)局部变量A.TSQL局部变量:是可以保存特定类型的单个数据值的对象。
一般说来在一个批处理中被声明、定义,在这个批处理(也可能是存储过程或触发器)中用SQL语言对这个变量赋值,或使用这个变量已经被赋予的值。
当批处理结束后,这个局部变量的生命周期就结束了。
作用:作为计数器在循环中使用;作为返回值;保存临时数据等;B.声明局部变量:格式:Declare @变量名1 数据类型,@变量名2 数据类型……说明:Declare的使用:(1)指派名称:第一个字符必为@+变量名;(2)指派系统提供或用户定义的数据类型和长度;(3)将值设置为NULL;示例:Declare @myCount intC.给变量赋值:Set 语句:如Set @myCount=100Select语句:如Select @myCount=100综合示例Use PubsGoDeclare @find varchar(30)Set @find=’Ring%’Select au_lname,au_fname,phoneFrom authorsWhere au_lname like @find(2)全局变量A)全局变量:变量名前用@@表示;在SQLServer7.0及以后的版本中,全局变量作为函数据形式被使用;B)一共30多个对于一般的用户来说,一般不用全局变量;C)SQLServer提供的系统全局变量不用声明直接使用使用:也可声明自定义的全局变量(类似局部变量);常用全局变量如下@@CONNECTIONS : 返回自上次启动SQL Server以来连接或试图连接的次数,用其可让管理人员方便地了解今天所有试图连接服务器的次数。
@@DA TEFIRST : 返回使用SET DA TEFIRST命令而被赋值的DA TAFIRST参数值。
SET DA TEFIRST命令用来指定每周的第一天是星期几。
@@SERVICENAME : 返回SQL Server正运行于哪种服务状态之下:如MS SQLServer、MSDTC、SQLServerAgent。
(转)MySQL中全局变量、会话变量、用户变量和局部变量的区别
(转)MySQL中全局变量、会话变量、⽤户变量和局部变量的区别原⽂:https://www.modb.pro/db/12232前⾔之前在项⽬的存储过程中发现有通过DECLARE关键字定义的变量如DECLARE cnt INT DEFAULT 0;,还有形如@count这样的变量,存储过程中拿过来直接就进⾏设置,像这样set @count=1;,这两种类型的变量究竟有什么区别却弄不清楚,赶紧上⽹查询资料,发现还有@@sql_mode这样的变量,这⼀个圈俩圈的到底是什么啊?会不会出现三个圈的情况?变量分类与关系经过⼀段时间学习和测试,再配合官⽅的⽂档,现在⼤致弄清楚了这些变量的区别,⼀般可以将MySQL中的变量分为全局变量、会话变量、⽤户变量和局部变量,这是很常见的分类⽅法,这些变量的作⽤是什么呢?可以从前往后依次看⼀下。
⾸先我们知道MySQL服务器维护了许多系统变量来控制其运⾏的⾏为,这些变量有些是默认编译到软件中的,有些是可以通过外部配置⽂件来配置覆盖的,如果想查询⾃编译的内置变量和从⽂件中可以读取覆盖的变量可以通过以下命令来查询:mysqld --verbose --help如果想只看⾃编译的内置变量可以使⽤命令:mysqld --no-defaults --verbose --help接下来简单了解⼀下这⼏类变量的应⽤范围,⾸先MySQL服务器启动时会使⽤其软件内置的变量(俗称写死在代码中的)和配置⽂件中的变量(如果允许,是可以覆盖源代码中的默认值的)来初始化整个MySQL服务器的运⾏环境,这些变量通常就是我们所说的全局变量,这些在内存中的全局变量有些是可以修改的。
当有客户端连接到MySQL服务器的时候,MySQL服务器会将这些全局变量的⼤部分复制⼀份作为这个连接客户端的会话变量,这些会话变量与客户端连接绑定,连接的客户端可以修改其中允许修改的变量,但是当连接断开时这些会话变量全部消失,重新连接时会从全局变量中重新复制⼀份。
SQL中局部变量全局变量详解
Transa ct-SQL局部变量和全局变量Transa ct-SQL中可以使用两种变量,一种是局部变量(LocalVariab le)另外一种是全局变量(Global Variab le)。
看到这个知识的时候我特别疑惑,因为课本上写着,变量是对T-SQL 语音的一种重要扩展,T-SQL中的变量可以分为局部变量(l ocal variabl e,以@为变量名称开头)和全局变量(gl obal variabl e,以@为名称开头),两者的用法和设置各不相同。
翻阅了好多资料最后证明一点,课本上写错了,全局变量应该以@@为开头。
不过这个过程也让我对这两个概念有了很深的认识。
局部变量局部变量是用户可自定义的变量,它的作用范围仅在程序内部。
在程序中通常用来储存从表中查询到的数据,或当作程序执行过程中暂存变量使用。
局部变量必须以“@”开头,而且必须先用DECLA RE命令说明后才可使用。
其说明形式如下:DECLAR E @变量名变量类型 [@变量名变量类型…]其中变量类型可以是SQ L Server 2000支持的所有数据类型,也可以是用户自定义的数据类型。
在Trans act-SQL中不能像在一般的程序语言中一样使用“变量=变量值”来给变量赋值。
必须使用SE LECT或SET命令来设定变量的值,其语法如下:SELECT@局部变量=变量值SET @局部变量=变量值例:声明一个长度为10 个字符的变量“id”并赋值declar e@id char(10)select@id=…10010001‟注意:可以在Sel ect命令查询数据时,在Selec t命令中直接将列值赋给变量。
例1:查询座位号为“3”的学员和年龄,将其分别赋予变量nam e和age。
sql局部变量,全局变量
sql局部变量,全局变量声明局部变量语法:DECLARE @variable_name DataType其中 variable_name为局部变量的名称,DataType为数据类型。
给局部变量赋值有两种⽅法:1、SET @variable_name=value2、SELECT @variable_name=value两者的区别:SET赋值语句⼀般⽤于赋给变量⼀个指定的常量,SELECT赋值语句⼀般⽤于从表中查询出数据然后赋给变量。
例如:DECLARE @count intSET @count=123PRINT @countdeclare @retCount int; //声明⼀个变量@retCountselect @retCount = count(*) from TableA where Returned = 0 --将查询到的count值赋值给变量@retCountselect @icount = icount,@title=title from Load_tb where eventtype=@eventtype声明多个变量:declare @i intdeclare @name varchar(10)全局变量:由于全局变量是系统定义的,我们这⾥只做举例。
@@ERROR 最后⼀个T-SQL错误的错误号@@IDENTITY 最后⼀次插⼊的标识值@@LANGUAGE 当前使⽤的语⾔名称@@MAX_CONNECTIONS 可以创建的同时连接的最⼤数⽬@@SERVERNAME 本地服务器的名称@@VERSION SQL Server的版本信息@@rowcount 主要是返回上次sql语句所影响的数据⾏数。
SQL数据库连接查询变量、ifelse、while
SQL数据库连接查询变量、ifelse、while ⼀、连接查询:通过连接运算符可以实现多个表查询。
连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的⼀个标志。
常⽤的两个链接运算符:1.join on(左右连接)2.union(上下连接)注:只有在列的数据类型⼀致时才能够连接起来⼆、变量SQL语⾔也跟其他编程语⾔⼀样,拥有变量、分⽀、循环等控制语句。
在SQL语⾔⾥⾯把变量分为局部变量和全局变量,全局变量⼜称系统变量(@@)。
局部变量:使⽤declare关键字给变量声明,语法⾮常简单:declare @<变量名> <变量类型>对变量的赋值可以使⽤set关键字,使⽤set关键字时对变量的赋值⼀次只能赋值⼀个。
我们也可以在查询语句⾥⾯对这个变量进⾏赋值。
全局变量:⼜叫做系统变量。
运算符:运算符优先级if。
else。
while语句while if 嵌套--语⽂成绩最⾼的学⽣信息select*from stu where scode=(select code from score where yu=(select max(yu) from score))select*from stu where scode=(select top1 code from score order by yu desc)--数学成绩最低的学⽣的任课⽼师的所有信息select*from tch where tcode=(select shujiao from stu where scode=(select code from score where shu=(select min(shu) from score))) --查询汇总成⼀个表:各门课分数、学⽣姓名、班级、任课⽼师的姓名select stu.sname,banji,score.yu,shu,ying,(select tname from tch where tcode=stu.yujiao) 语⽂⽼师,(select tname from tch where tcode=stu.shujiao)数学⽼师,(select tname from tch where tcode=stu.yingjiao)英语⽼师from stu join score on stu.scode=score.codeprint@@versionselect yu,case yuwhen99then'优秀'when88then'良好'else'合格'endfrom scorego--查询每个班⾥数学最⾼分select banji,max(shu) from stu join score on stu.scode=score.code group by banji--查询语⽂平均分最⾼的班级的⽼师的信息select*from tch where tcode=(select top1 yujiao from stu where banji=(select top1 banji from stu join score on stu.scode=score.code group by banji order by avg(yu) desc))练习。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SQL中的全局变量和局部变量在SQL中,我们常常使用临时表来存储临时结果,对于结果是一个集合的情况,这种方法非常实用,但当结果仅仅是一个数据或者是几个数据时,还要去建一个表,显得就比较麻烦,另外,当一个SQL语句中的某些元素经常变化时,比如选择条件,(至少我想)应该使用局部变量。
当然MS SQL Server的全局变量也很有用。
>>>>局部变量声明:DECLARE @local_variable data_type@local_variable 是变量的名称。
变量名必须以 at 符 (@) 开头。
data_type 是任何由系统提供的或用户定义的数据类型。
变量不能是 text、ntext 或 image 数据类型。
示例:use masterdeclare @SEL_TYPE char(2)declare @SEL_CUNT numeric(10)set @SEL_TYPE = 'U'/*user table*/set @SEL_CUNT = 10/*返回系统中用户表的数目*/select @SEL_CUNT = COUNT(*)from sysobjectswhere type = @SEL_TYPEselect @SEL_CUNT as 'User table ''s count'如果要返回系统表的数目,可以用set @SEL_TYPE = 'S'可能这个例子并不能说明使用变量的好处,我只是想说明使用方法。
当一组(几个甚至几十个)SQL语句都使用某个变量时,就能体会到他的好处了。
>>>>全局变量全局变量是系统预定义的,返回一些系统信息,全局变量以两个at(@)开头。
下面是我统计了一些较为常用的变量。
@@CONNECTIONS返回自上次启动以来连接或试图连接的次数。
@@CURSOR_ROWS返回连接上最后打开的游标中当前存在的合格行的数量(返回被打开的游标中还未被读取的有效数据行的行数)@@DATEFIRST返回每周第一天的数字@@ERROR返回最后执行的SQL 语句的错误代码。
@@FETCH_STATUS返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
@@IDENTITY返回最后插入的标识值@@LANGID返回当前所使用语言的本地语言标识符(ID)。
@@LANGUAGE返回当前使用的语言名。
@@LOCK_TIMEOUT返回当前会话的当前锁超时设置,单位为毫秒。
@@PROCID返回当前过程的存储过程标识符 (ID) 。
@@ROWCOUNT返回受上一语句影响的行数。
@@SERVERNAME返回运行的本地服务器名称。
@@SPID返回当前用户进程的服务器进程标识符 (ID)。
@@TRANCOUNT返回当前连接的活动事务数。
@@VERSION返回当前安装的日期、版本和处理器类型。
@@CPU_BUSY返回自SQL Server 最近一次启动以来CPU 的工作时间其单位为毫秒@@DATEFIRST返回使用SET DATEFIRST 命令而被赋值的DATAFIRST 参数值SET DATEFIRST,命令用来指定每周的第一天是星期几@@DBTS返回当前数据库的时间戳值必须保证数据库中时间戳的值是惟一的@@ERROR返回执行Transact-SQL 语句的错误代码@@FETCH_STATUS返回上一次FETCH 语句的状态值@@IDLE返回自SQL Server 最近一次启动以来CPU 处于空闭状态的时间长短单位为毫秒@@IO_BUSY返回自SQL Server 最近一次启动以来CPU 执行输入输出操作所花费的时间其单位为毫秒@@LANGID返回当前所使用的语言ID 值@@LANGUAGE返回当前使用的语言名称@@LOCK_TIMEOUT返回当前会话等待锁的时间长短其单位为毫秒@@MAX_CONNECTIONS返回允许连接到SQL Server 的最大连接数目@@MAX_PRECISION返回decimal 和numeric 数据类型的精确度@@NESTLEVEL返回当前执行的存储过程的嵌套级数初始值为0@@OPTIONS返回当前SET 选项的信息@@PACK_RECEIVED返回SQL Server 通过网络读取的输入包的数目@@PACK_SENT返回SQL Server 写给网络的输出包的数目@@PACKET_ERRORS返回网络包的错误数目@@PROCID返回当前存储过程的ID 值@@REMSERVER返回远程SQL Server 数据库服务器的名称@@SERVICENAME返回SQL Server 正运行于哪种服务状态之下如MSSQLServer MSDTC SQLServerAgent@@SPID返回当前用户处理的服务器处理ID 值@@TEXTSIZE返回SET 语句的TEXTSIZE 选项值SET 语句定义了SELECT 语句中text 或image数据类型的最大长度基本单位为字节@@TIMETICKS返回每一时钟的微秒数@@TOTAL_ERRORS返回磁盘读写错误数目@@TOTAL_READ返回磁盘读操作的数目@@TOTAL_WRITE返回磁盘写操作的数目@@TRANCOUNT返回当前连接中处于激活状态的事务数目常用函数----统计函数----AVG --求平均值COUNT --统计数目MAX --求最大值MIN --求最小值SUM --求和--AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id--MAX--求工资最高的员工姓名use panguselect e_namefrom employeewhere e_wage =(select max(e_wage)from employee)--STDEV()--STDEV()函数返回表达式中所有数据的标准差--STDEVP()--STDEVP()函数返回总体标准差--VAR()--VAR()函数返回表达式中所有值的统计变异数--VARP()--VARP()函数返回总体变异数----算术函数----/***三角函数***/SIN(float_expressiοn) --返回以弧度表示的角的正弦COS(float_expressiοn) --返回以弧度表示的角的余弦TAN(float_expressiοn) --返回以弧度表示的角的正切COT(float_expressiοn) --返回以弧度表示的角的余切/***反三角函数***/ASIN(float_expressiοn) --返回正弦是FLOAT 值的以弧度表示的角ACOS(float_expressiοn) --返回余弦是FLOAT 值的以弧度表示的角ATAN(float_expressiοn) --返回正切是FLOAT 值的以弧度表示的角ATAN2(float_expressiοn1,float_expressiοn2)--返回正切是float_expressiοn1 /float_expres-sion2的以弧度表示的角DEGREES(numeric_expressiοn)--把弧度转换为角度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expressiοn) --把角度转换为弧度返回与表达式相同的数据类型可为--INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expressiοn) --返回表达式的指数值LOG(float_expressiοn) --返回表达式的自然对数值LOG10(float_expressiοn)--返回表达式的以10 为底的对数值SQRT(float_expressiοn) --返回表达式的平方根/***取近似值函数***/CEILING(numeric_expressiοn) --返回>=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expressiοn) --返回<=表达式的最小整数返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expressiοn) --返回以integer_expressiοn 为精度的四舍五入值返回的数据--类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expressiοn) --返回表达式的绝对值返回的数据类型与表达式相同可为--INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expressiοn) --测试参数的正负号返回0 零值1 正数或-1 负数返回的数据类型--与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π 即3.1415926535897936RAND([integer_expressiοn]) --用任选的[integer_expressiοn]做种子值得出0-1 间的随机浮点数----字符串函数----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数用于将ASCII 码转换为字符--如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值LOWER() --函数把字符串全部转换为小写UPPER() --函数把字符串全部转换为大写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的子串出现的开始位置SOUNDEX() --函数返回一个四位字符码--SOUNDEX函数可用来查找声音相似的字符串但SOUNDEX函数对数字和汉字均只返回0 值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0 两个SOUNDEX 函数返回值的第一个字符不同--1 两个SOUNDEX 函数返回值的第一个字符相同--2 两个SOUNDEX 函数返回值的第一二个字符相同--3 两个SOUNDEX 函数返回值的第一二三个字符相同--4 两个SOUNDEX 函数返回值完全相同QUOTENAME() --函数返回被特定字符括起来的字符串/*select quotename('abc', '{'} quotename('abc')运行结果如下----------------------------------{{abc} [abc]*/REPLICATE() --函数返回一个重复character_expressiοn 指定次数的字符串/*select replicate('abc', 3) replicate( 'abc', -2) replicate( 'abc', 0)运行结果如下----------- -----------abcabcabc NULL [空]*/REVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定子串的字符串/*select replace('abc123g', '123', 'def')运行结果如下----------- -----------abcdefg*/SPACE() --函数返回一个有指定长度的空白字符串STUFF() --函数用另一子串替换字符串指定位置长度的子串----数据类型转换函数----CAST()函数语法如下CAST() (<expressiοn> AS <data_ type>[ length ])CONVERT()函数语法如下CONVERT() (<data_ type>[ length ], <expressiοn> [, style])select cast(100+99 as char) convert(varchar(12), getdate())运行结果如下------------------------------ ------------199 Jan 15 2000----日期函数----DAY() --函数返回date_expressiοn 中的日期值MONTH() --函数返回date_expressiοn 中的月份值YEAR() --函数返回date_expressiοn 中的年份值DATEADD(<datepart> ,<number> ,<date>)--函数返回指定日期date 加上指定的额外日期间隔number 产生的新日期DATEDIFF(<datepart> ,<number> ,<date>)--函数返回两个指定日期在datepart 方面的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回日期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回日期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的日期和时间----系统函数----APP_NAME() --函数返回当前执行的应用程序的名称COALESCE() --函数返回众多表达式中第一个非NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使用用于插入一个identity column列到新表中/*select identity(int, 1, 1) as column_nameinto newtablefrom oldtable*/ISDATE() --函数判断所给定的表达式是否为合理日期ISNULL(<check_expressiοn>, <replacement_value>) --函数将表达式中的NULL 值用指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回一个UNIQUEIDENTIFIER 类型的数值NULLIF(<expressiοn1>, <expressiοn2>)--NULLIF 函数在expressiοn1 与expressiοn2 相等时返回NULL 值若不相等时则返回expressiοn1 的值。