SQL Server在T-SQL语句中使用变量
作者:springsnow 发布时间:2024-01-21 10:21:34
变量的种类
在T-SQL中,变量按生存范围可以分为全局变量(Global Variable)和局部变量(Local Variable)
全局变量是由系统定义的,在整个SQL Server实例内都能访问到的变量,全部变量以@@开头,用户只能访问,不能赋值。
局部变量由用户定义,生命周期只在一个批处理内有效。局部变量以@作为第一个字符,由用户自己定义和复制。
示例:
DECLARE @i int --声明一个int类型局部变量
SET @i = 10 --通过SET对局部变量进行赋值
DECLARE @Name nvarchar(20) --声明一个nvarchar(20)类型变量
SET @Name = '张飞'
PRINT @@VERSION --全部变量,只能读取,不能赋值
SET @@VERSION = '123' --此行代码报错
全局变量
全局变量的用途
全局变量是SQL Server系统内部使用的变量,其作用范围并不仅仅局限于某一程序,而是任何程序均可以随时调用。
全局变量通常存储一些SQL Server的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。
全局变量列表
select @@CONNECTIONS; --返回自上次SQL启动以来连接或试图连接的次数。
select @@CPU_BUSY / 100; --返回自上次启动SQL 以来 CPU 的工作时间,单位为毫秒
select @@CURSOR_ROWS as w; --返回被打开的游标中还未被读取的有效数据行的行数
select @@DATEFIRST as w; --返回使用SET DATEFIRST 命令而被赋值的DATAFIRST ,用来指定每周的第一天是星期几
select @@FETCH_STATUS as w; --返回上一次FETCH 语句的状态值(0:成功,-1失败或行超过结果集,-2行没找到)
select @@DBTS as w; --为当前数据库返回当前 timestamp 数据类型的值。这一 timestamp 值保证在数据库中是唯一的。
select @@ERROR; --返回最后执行的 Transact-SQL 语句的错误代码(integer) (0,表示没错误;1,表示有错误)
select @@IDENTITY as w; --返回最后插入的标识值
select @@IDLE as w; --返回SQL自上次启动后闲置的时间,单位为毫秒
select @@IO_BUSY as w; --返回SQL自上次启动后用于执行输入和输出操作的时间,单位为毫秒
select @@LANGID as w; --返回当前所使用语言的本地语言标识符(ID)。
select @@LANGUAGE as w; --返回当前使用的语言名
select @@LOCK_TIMEOUT as w; --当前会话的当前锁超时设置,单位为毫秒。
select @@MAX_CONNECTIONS as w; --返回SQL上允许的同时用户连接的最大数。返回的数不必为当前配置的数值
select @@MAX_PRECISION as w; --返回 decimal 和 numeric 数据类型所用的精度级别,即该服务器中当前设置的精度。默认最大精度38。
select @@OPTIONS as w; --返回当前 SET 选项的信息。
select @@PACK_RECEIVED as w; --返回SQL自启动后从网络上读取的输入数据包数目。
select @@PACK_SENT as w; --返回SQ自上次启动后写到网络上的输出数据包数目。
select @@PACKET_ERRORS as w; --返回自SQL启动后,在SQL连接上发生的网络数据包错误数。
select @@ROWCOUNT as w; --返回上一次语句影响的数据行的行数
select @@SERVERNAME as w; --返回运行SQL服务器名称。
select @@SERVICENAME as w; --返回SQL正在其下运行的注册表键名
select @@TIMETICKS as w; --返回SQL服务器一刻度的微秒数
select @@TOTAL_ERRORS as w; --返回 SQL服务器自启动后,所遇到的磁盘读/写错误数。
select @@TOTAL_READ as w; --返回 SQL服务器自启动后读取磁盘的次数。
select @@TOTAL_WRITE as w; --返回SQL服务器自启动后写入磁盘的次数。
select @@TRANCOUNT as w; --返回当前连接的活动事务数。
select @@VERSION as w; --返回当前安装的SQL Server 的日期版本处理器
局部变量
局部变量的用途
在循环中记录循环次数
储存存储过程或者函数的返回值
局部变量的声明
局部变量的声明必须以"DECLARE"作为关键字,变量的命名必须以"@"作为变量名的第一个字符,必须为所声明的变量提供一个数据类型和数据长度。
如:
DECLARE @Name nvarchar(20)
注意:局部变量的数据类型不能为Text,ntext,和Image类型,当对于字符型变量只提供数据类型没有提供数据长度时,数据长度默认为1.
设置变量中的值(赋值)
有两种设置变量值方法。可以使用SELECE语句或者SET语句。从功能上看,它们的作用几乎是相同的,不同的是SELECT语句允许元数据值来自SELECT语句中的某一列。
1、使用SET设置变量
DECLARE @i int,@j int
set @i = 10;
set @j = 20;
select @i + @j
用查询到的值设置变量:
DECLARE @i int
SET @i = (select MAX(Age) from Person)--当使用SET时如果返回结果有多行也会报错。同时如果返回多条记录也报错
SELECT @i
2、使用SELECT设置变量:
当变量中存储的信息来源于查询时,经常使用SELECT给变量赋值,语法比较简便。
DECLARE @i int
SELECT @i = 100
SELECT @i
查询的信息为变量赋值:
DECLARE @i int
SELECT @i = Age from Person_1 order by Id desc --当返回多个值时用最后一个赋值
PRINT @i
SELECT同时设置多个值:
DECLARE @Name varchar(20)
DECLARE @i int
SELECT @i = 10, @Name = '张飞'
3、当表达式未返回值时
使用SET对局部变量赋值时,如果赋值表达式未返回值,则局部变量变为NULL;而SELECT对表达式赋值时,如果表达式未返回值,则局部变量保持原值。
一切只声明没有赋值的局部变量的初始值都为”NULL”。
例如:
DECLARE @Name nvarchar(50)
SET @Name = '黄飞鸿'
select @Name = Name from Person_1 where Id = 100 --100不存在记录,此处如果改为一个Id存在的,且Name列不为null的值,则@Name变量的值就变了
PRINT @Name--依然打印的是黄飞鸿
可见,当SELECT表达式赋值时,如果为返回值,则保持原值。
局部表变量
局部表变量是一个特殊的局部变量。和临时表不同,局部表变量具有一切局部变量的特点。在查询中,因为局部表变量是存在内存中,而不是硬盘中,所以速度会远远快于临时表或是实际表。局部表变量最多的使用是在查询中充当多个表做连接时的中间表。
DECLARE @TempTable TABLE--声明一个局部表变量
(
Id int,
Name nvarchar(50)
)
INSERT INTO @TempTable--用查询到的作为数据插入到局部表变量
SELECT Id,Name FROM Person_1
SELECT * FROM @TempTable --和普通表一样用,可以各种join,子查询等等。
来源:https://www.cnblogs.com/springsnow/p/9881135.html


猜你喜欢
- 编程是数据科学中不可或缺的技能,虽然创建脚本来执行基本功能很容易,但编写大规模可读性良好的代码需要更多的思考。关于PEP-8pycodest
- 之前上传图片都是直接将图片转化为io流传给服务器,没有用框架传图片。最近做项目,打算换个方法上传图片。Android发展到现在,Okhttp
- 本文实例讲述了Smarty实现页面静态化(生成HTML)的方法。分享给大家供大家参考,具体如下:为了减少数据库读取次数,某些内容不经常被更改
- Python生成随机验证码,需要使用PIL模块,具体内容如下安装:pip3 install pillow基本使用1. 创建图片from PI
- 1、正则表达式包括两部分①定义正则表达式的规则;②正则表达式的模式(i/g/m);2、声明正则表达式① 字面量声明: var reg = /
- 本文实例为大家分享了python使用Matplotlib绘制分段函数的具体代码,供大家参考,具体内容如下环境Python3Mac OS代码#
- 本文实例讲述了pymongo为mongodb数据库添加索引的方法。分享给大家供大家参考。具体实现方法如下:from pymongo impo
- 版本 0.9来自 http://onewww.net说明:当焦点不在表格内的input时,回车键复制最后一行,delete删除键最后一行选择
- django可以使用restframework快速开发接口,返回前端所需要的json数据,但是有时候利用restframework开发的接口
- 核心代码:#!/usr/bin/python#Filename:friendbook.pyimport cPickle as pimport
- 本文实例讲述了微信小程序学习笔记之本地数据缓存功能。分享给大家供大家参考,具体如下:前面介绍了微信小程序获取位置信息操作。这里再来介绍一下微
- 简介:在视频相关测试场景下,例如:有时需要知道全部视频的汇总时长,显然一个个打开并且手工计算耗时耗力,我们可以通过编写脚本进行快速汇总。获取
- 在vue中使用ant-design-vue组件官方地址:Ant Design Vue1. 安装首先使用vue-cli创建项目,然后进入项目,
- 背景(background)在项目中经常会使用。这篇文章主要讲解的是实际项目中的5个实例。通过具体的分析来达到学习的目的。1,Li列表通过u
- 我就废话不多说了,大家还是直接看代码吧~package mainimport ( "net/http")func mai
- 前言废话不多说,直接开造。这里的话我们有两个目标,第一个是如何把一个2维图片上的点映射到3维空间。第二就是如何生成3D点云。当然实际上这是一
- 一、yield运行方式我们定义一个如下的生成器:def put_on(name): print("Hi {}, 货物来了,准备搬到
- 前言OpenCV是图像处理常用的库,作为初学者,往往从图片的读取、保存、查询图片的信息开始,下面将分享Python下OpenCV的一些基本使
- 在开发的时候, 可以使用类对方法进行封装,如果某一个方法需要访问到对象的实例属性,可以把这个方法封装成一个实例方法。如果某一个方法不需要访问
- 前言虽然现在文件上传下载工具多如牛毛,比如http、ftp、sftp、scp等方案都可以用于文件传输,但都是需要安装服务器甚至客户端。有一种