博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[T-SQL]从变量与数据类型说起
阅读量:5897 次
发布时间:2019-06-19

本文共 2916 字,大约阅读时间需要 9 分钟。

 1.变量

学习计算机语言,难免不碰到这个名词,不过咱这里说的是MSSQL(微软SQL Server产品)里的数据库语言实现。

稍微对程序比较严谨的语言都要求使用之前都要声明变量先,比如c.c++,java,c#之类,T-SQL也没有例外。

可以试验下:

  SELECT @hello 

会有如下类似错误信息:

   [Err] 42000 - [SQL Server]必须声明标量变量 "@hello"。 

声明变量使用如下关键字:DECLARE(不区分大小写的)

声明变量需要使用类型,因为“我”要知道你这玩意到底是整数还是日期还是字符串,我该给你分配多少字节空间啊。

2.数据类型

数据类型就是之前提到的整型,字符之类的类别。

我们的格式是:

   DECLARE 变量名 类型 

我这里约定下,关键字和类型等用大写,变量名小写,你可以不这样子,但希望你遵守“我们学堂”的规范,呵呵。

先说下,TSQL这孩子变量分好多哇,跟其他语言差不多(其他语言有,局部变量,全局变量之类的,俺可没搞什么大的特殊)

这里先用局部变量(Local Variant),T-SQL局部变量是@后接变量名字,

   DECLARE @hello VARCHAR(30) 

俺可以一次声明多个呢,

  DECLARE @i INT, 

     @j INT 

当然了声明后,俺们的值是个NULL(注意不是'NULL'字符串哦)

SELECT @i 您看看吧

你坑我啊,光个NULL怎么用,别急,我们看看怎么给他们赋值,不会和其他语言一样直接用赋值运算符=吧,对头不过语法稍微区别下

3.赋值

  1. SET @i=123 

这次看看吧SELECT @i

当然SET也可以用SELECT代替。

稍微来点复杂的:

--===================== 

--计算面积@area=@m*@n 

--===================== 

DECLARE @m INT,         @n INT,         @area INT SET @m=12 SET @n=5 SET @area=@m*@n SELECT @area

赋值也可以是sql执行的结果:

USE pubs GO DECLARE @count INT SET @count=(SELECT COUNT(*) FROM authors) SELECT @count GO

  

 

 变量也可以用在sql里,比如下面:

USE pubs GO DECLARE @city CHAR(20) SET @city='Oakland' SELECT RTRIM(au_fname) + ' ' + RTRIM(au_lname) AS Name FROM authors WHERE city = @city GO

4.流程控制

分支条件语句这个太常见了,顺序、分支和重复(循环)是结构化程序设计的3个流程,不得不说。

我们看看T-SQL里的条件语句怎么写,关键字IF不多说了。

如下:

 

  1. DECLARE @i INT 
  2. SET @i=123 
  3. IF @i>0 (SELECT 'positive') 

一条语句可以这么干,多条语句块怎么整呢,别着急,BEGIN...END啊,(如果没在一些语言里见过,c类似的里面的{}总该行了吧)

DECLARE @i INT SET @i=123 IF @i>0      BEGIN         SELECT 'positive'         SELECT 'not negative'     END ELSE     SELECT 'OMG'

 

没错ELSE也支持的。

也可以嵌套。

循环LOOP

使用关键字WHILE

DECLARE @i INT SET @i=0 WHILE @i<10     BEGIN         SET @i=@i+1         PRINT '@i='+CAST(@i AS CHAR)     END

  

while也可以嵌套。

5.附录:数据类型总结

比特bit:取值0,1和NULL

整型:

tinyint:取值0-255,存储大小1个字节

smallint:2个字节,-32768~+32767

int:4个字节

bigint:8个字节

 

以下来自文档:

 

decimal 和 numeric 

从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。

功能上等同于 decimal

money 和 smallmoney

货币数据值介于 -2^63 (-922,337,203,685,477.5808) 与 2^63 - 1 (+922,337,203,685,477.5807) 之间,精确到货币单位的千分之十。

货币数据值介于 -214,748.3648 与 +214,748.3647 之间,精确到货币单位的千分之十。

近似数字

从 -1.79E + 308 到 1.79E + 308 的浮点精度数字。

从 -3.40E + 38 到 3.40E + 38 的浮点精度数字。

datetime 和 smalldatetime

从 1753 年 1 月 1 日到 9999 年 12 月 31 日的日期和时间数据,精确到百分之三秒(或 3.33 毫秒)。

从 1900 年 1 月 1 日到 2079 年 6 月 6 日的日期和时间数据,精确到分钟。

字符串

固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。

可变长度的非 Unicode 数据,最长为 8,000 个字符。

可变长度的非 Unicode 数据,最大长度为 2^31 - 1 (2,147,483,647) 个字符。

Unicode 字符串

固定长度的 Unicode 数据,最大长度为 4,000 个字符。

可变长度 Unicode 数据,其最大长度为 4,000 字符。sysname 是系统提供用户定义的数据类型,在功能上等同于nvarchar(128),用于引用数据库对象名。

可变长度 Unicode 数据,其最大长度为 2^30 - 1 (1,073,741,823) 个字符。

二进制字符串

固定长度的二进制数据,其最大长度为 8,000 个字节。

可变长度的二进制数据,其最大长度为 8,000 个字节。

可变长度的二进制数据,其最大长度为 2^31 - 1 (2,147,483,647) 个字节。

其它数据类型

游标的引用。

一种存储 SQL Server 支持的各种数据类型(textntexttimestamp 和 sql_variant 除外)值的数据类型。

一种特殊的数据类型,存储供以后处理的结果集。

数据库范围的唯一数字,每次更新行时也进行更新。

全局唯一标识符 (GUID)。

 

转载自:http://xcf007.blog.51cto.com/471707/833008

转载于:https://www.cnblogs.com/tonnytong/p/3921672.html

你可能感兴趣的文章
public/private/protected的具体区别
查看>>
面试宝典——求一个字符串中连续出现次数最多的子串
查看>>
VMware Workstation虚拟机上网设置
查看>>
Jenkins持续集成学习-搭建jenkins问题汇总
查看>>
C#Note13:如何在C#中调用python
查看>>
Android介绍以及源码编译---Android源码下载
查看>>
SpringBoot集成redis缓存
查看>>
sql经典语句
查看>>
使用ffmpeg实现对h264视频解码 -- (实现了一个易于使用的c++封装库)
查看>>
第4周作业-面向对象设计与继承
查看>>
机器学习的原理
查看>>
flink watermark介绍
查看>>
[Flink原理介绍第四篇】:Flink的Checkpoint和Savepoint介绍
查看>>
mybatis学习之一 开发环境配置和接口编程
查看>>
Android Xutils 框架
查看>>
C#基础知识整理 基础知识(21) 委托(二)
查看>>
Android应用程序键盘(Keyboard)消息处理机制分析(16)
查看>>
Sysbench 0.5版安装配置
查看>>
统一沟通-技巧-11-Lync-联盟-无法-音频-远程桌面-传文件
查看>>
书摘—你不可不知的心理策略
查看>>