1.变量java
学习计算机语言,不免不碰到这个名词,不过咱这里说的是MSSQL(微软SQL Server产品)里的数据库语言实现。c++
稍微对程序比较严谨的语言都要求使用以前都要声明变量先,好比c.c++,java,c#之类,T-SQL也没有例外。sql
能够试验下:数据库
- SELECT @hello
会有以下相似错误信息:c#
- [Err] 42000 - [SQL Server]必须声明标量变量 "@hello"。
声明变量使用以下关键字:DECLARE(不区分大小写的)ide
声明变量须要使用类型,由于“我”要知道你这玩意究竟是整数仍是日期仍是字符串,我该给你分配多少字节空间啊。学习
2.数据类型spa
数据类型就是以前提到的整型,字符之类的类别。设计
咱们的格式是:code
- DECLARE 变量名 类型
我这里约定下,关键字和类型等用大写,变量名小写,你能够不这样子,但但愿你遵照“咱们学堂”的规范,呵呵。
先说下,TSQL这孩子变量分好多哇,跟其余语言差很少(其余语言有,局部变量,全局变量之类的,俺可没搞什么大的特殊)
这里先用局部变量(Local Variant),T-SQL局部变量是@后接变量名字,
- DECLARE @hello VARCHAR(30)
俺能够一次声明多个呢,
- DECLARE @i INT,
- @j INT
固然了声明后,俺们的值是个NULL(注意不是'NULL'字符串哦)
SELECT @i 您看看吧
你坑我啊,光个NULL怎么用,别急,咱们看看怎么给他们赋值,不会和其余语言同样直接用赋值运算符=吧,对头不过语法稍微区别下
3.赋值
- 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很少说了。
以下:
- DECLARE @i INT
- SET @i=123
- 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个字节
如下来自文档:
从 -10^38 +1 到 10^38 –1 的固定精度和小数位的数字数据。
功能上等同于 decimal。
货币数据值介于 -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 的浮点精度数字。
从 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 数据,最大长度为 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 支持的各类数据类型(text、ntext、timestamp 和 sql_variant 除外)值的数据类型。
一种特殊的数据类型,存储供之后处理的结果集。
数据库范围的惟一数字,每次更新行时也进行更新。
全局惟一标识符 (GUID)。