/*生命变量 declare 变量名 变量类型*/
declare @one varchar(10), @two int, @three varchar(10)
/*变量赋值 可以用set或select关键字,可以把select执行的结果赋值给变量*/
set @one='one'
select @two=2
set @three='three'
/*判断语句 begin end 相当于C++里面的{}*/
if @two > 1
begin
print @one
print @two
end
else
begin
print @two
print @three
end
/*while 循环语句*/
while @two < 10
begin
set @two = @two + 1
print @two
end
/*case 条件判断语句*/
select
case
when Id=100 then 'zhangsan'
end
from 学生表
/*WAITFOR延迟语句*/
waitfor delay '00:00:05' /*等到5秒后执行*/
waitfor time '18:18:18' /*等到今天这个点再执行*/
print 'go'
/*GOTO语句*/
goto b
b:print 1
/*TRY错误处理语句*/
begin try
declare @num int
set @num=1/0
end try
begin catch
select ERROR_LINE() as '错误行数', ERROR_MESSAGE() as '错误信息'
end catch
/*游标使用*/
use 人事系统
go
select * from 员工表
-- 声明游标
declare 人事_cursor scroll cursor
for
select Name from 员工表
for update
--打开游标
open 人事_cursor
--下一个
declare @name varchar(20)
fetch next from 人事_cursor
into @name
if @@FETCH_STATUS = 0 --可以通过fetch_status 的值来判断是否读取成功,0为成功,-1为失败,-2为不存在
print @name
else
print '提取错误'
go
--最后一个
declare @name varchar(20)
fetch last from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--向前
declare @name varchar(20)
fetch prior from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--第一个
declare @name varchar(20)
fetch first from 人事_cursor
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--具体
declare @name varchar(20)
fetch absolute 5 from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--关闭游标
close 人事_cursor
--释放游标
deallocate 人事_cursor
/*事务*/
begin transaction 开始事务
commit transaction 提交事务
rollback transaction 回滚事务
save transaction 保存事务
/*事务是可以进行嵌套的*/
begin transaction /*事务后面可以添加事务名称*/
declare @temp varchar(10)
set @temp='汉族'
insert into 员工表(Name, Sector, Salary) values('linukey', '管理部', 100000000)
/*如果这里添加save transaction的话,则无论后面是否成立,这条记录都会插入*/
if @temp='汉族'
begin
commit transaction /*提交记录*/
end
else
rollback transaction /*回滚,不会插入记录*/
/*所谓封锁,就是一个事务可向系统提出请求,对被操作的数据加锁。
其他事务必须等到此事务解锁后才能访问该数据。
从而,在多个用户并发访问数据库时,确保不互相干扰。
可锁定的单位是:行、页、表、盘区、和数据库*/
/*
锁的类型:
1.共享锁(S锁):
用于读操作。
多个事务可封锁一个共享单位的数据。
任何事务都不能修改加s锁的数据。
通常是加s锁的数据被读取完毕,s锁立即被释放。
2.独占锁(X锁):
用于写操作。
仅允许一个事务封锁此共享数据。
其他任何事务必须等到X锁被释放才能对该数据进行访问。
X锁一直到事务结束才能被释放。
3.更新锁(U锁):
用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁。
当被读取数据页将要被更新时,则升级为X锁。
U锁一直到事务结束时才能被释放。
*/
/*
死锁:....
*/
/*数据类型*/
/*
数据类型
1. 整数数据类型:
Int : 4个字节
Small: Int 2个字节
Tiny Int : 0-255 1个字节
Big Int: 8个字节
2. 二进制数据类型
Binary: 前面加0X作为二进制标识,例如“0Xabc”
定义形式:Binary(n),n=1-8000
n+4个字节
Var Binary: 具有变动长度的特性
3. 浮点数据类型(存储十进制小数)
Real: 精确到7位小数,占4个字节
Float: 精确到15位小数,占8个字节
Numeric: 同Decimal
Decimal: 可以用2-17个字节来存储
decimal(15,5)表示:共15位,其中整数10位,小数5位
4. 逻辑数据类型
Bit: 0/1,输入0/1以外的数被视为1. 占1个字节,不能定义为Null
5. 字符数据类型
Char: char(n),n表示字符所占的存储空间
每个字符或符号占一个字节的存储空间。
若不制定n,那么系统默认为1
ANSI字符
NChar: Unicode字符
每个字符占两个字节的存储空间
VarChar: 同Char,但是其有变动长度的特性。
若输入字符长度>n,那么Varchar和Char都会截掉多余部分
若输入字符长度,那么char的话则系统自动在其后添加空格来填满设定好的空间若输入的数据过长将会截掉其超出部分,varchar不行
NVarChar:与Varchar相似,只是采用Unicode标准字符集
6. 日期和时间数据类型
DateTime: 可以精确到毫秒,占8个字节
SmallDateTime: 精确到分钟,占4个字节
Date: 只存储日期部分,不包括时间
Time: 只存储时间部分,不包括日期
DateTime2:
DateTimeOffSet: 带有时区提示
日期的输入格式:
英文+数字:Jane 21 2012, Oct 1 2010, 2010 May 1, 2010 1 May
数字+分隔符(/ - .):2010/6/22 2010-6-22 2.5.2010
纯数字格式:20100601, 091212, 2008
时间的输入格式:
必须按照小时->分钟->秒->毫秒的顺序,用冒号:隔开
12小时制时加上AM/PM, 不区分大小写
10:23:5.123AM 秒与毫秒之间用.
7. 货币数据类型
需要在数据前加上货币符号
Money: 有4位小数,占8个字节
SmallMoney: 范围比Money小,占4个字节
8. 文本数据类型
存储大量的字符
Text:
NText: 采用Unicode字符集
9. 图像数据类型
存储大量的二进制数据
Image: 同Binary数据一样需要在数据前加"0X"
10. TimeStamp数据类型
每个数据库表中只能有一个TimeStamp数据类型的列。
此类型相当于Binary,VerBinary
当列在更新或插入数据时,此列的值会被自动更新。
11. UniqueIdentifier数据类型
存储16位的二进制数,该数叫作:
GUID(Globally Unique Identifier) 全球唯一鉴别号
由Sql Server2008的函数NewId()产生
12. Geometry数据类型 --基于位置的数据类型
存储x,y,并且支持基于这些值的计算。
基于平面进行计算
13. Geography
存储x,y 并且支持基于这些值的计算
基于地球的实际形状计算
14. Table数据类型
不作为表的列,只能用于T-SQL的变量和用户定义函数的返回值。
*/
/*运算符*/
/*
算数运算符:
+ - * / %
位运算符:
&:位与逻辑运算,从两个表达式中取对应的位。当且仅当输入表达式中两个位的值都为1时,结果中的位才被置为1,否则,结果中的位置为0.
|:位或逻辑运算,从两个表达式中取对应的位。如果输入表达式中两个位只要有一个的值为1时,结果的位就被设置为1;只有当两个位的值为1时,结果的位就被设置为1;只有当两个为的值都为0时,结果中的位才被设置为0;
^:位异或运算,从两个表达式中取对应的位。如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;只有当两个位的值都为0或1时,结果中的位才被设置为0;
比较运算符:
等于:=
大于:>
小于:<
大于等于:>=
小于等于:<=
不等于:<>
不等于:!=
不小于:!<
不大于:!>
逻辑运算符:
ALL:如果一组的比较都为TRUE,则比较结果为TRUE
AND:只有两个布尔表达式都为TRUE,则结果为TRUE
ANY:如果一组的比较重任何一个为TRUE,则结果为TRUE
BETWEEN:如果操作数在某个范围之内,那么结果为TRUE
EXISTS:如果子查询中包含了一些行,那么结果为TRUE
IN:如果操作数等于表达式列表中的一个,那么结果为TRUE
LIKE:如果操作数与某种模式相匹配,那么结果为TRUE
NOT:对任何其他布尔运算符的结果值取反
OR:如果两个布尔表达式中的任何一个为TRUE,那么结果为TRUE
SOME:如果在一组比较中,有些比较为TRUE, 那么结果为TRUE
赋值运算符:
=
连接运算符:
+
一元运算符:
+ 数值为正
- 数值为负
~ 返回数字的逻辑非
*/
declare @one varchar(10), @two int, @three varchar(10)
/*变量赋值 可以用set或select关键字,可以把select执行的结果赋值给变量*/
set @one='one'
select @two=2
set @three='three'
/*判断语句 begin end 相当于C++里面的{}*/
if @two > 1
begin
print @one
print @two
end
else
begin
print @two
print @three
end
/*while 循环语句*/
while @two < 10
begin
set @two = @two + 1
print @two
end
/*case 条件判断语句*/
select
case
when Id=100 then 'zhangsan'
end
from 学生表
/*WAITFOR延迟语句*/
waitfor delay '00:00:05' /*等到5秒后执行*/
waitfor time '18:18:18' /*等到今天这个点再执行*/
print 'go'
/*GOTO语句*/
goto b
b:print 1
/*TRY错误处理语句*/
begin try
declare @num int
set @num=1/0
end try
begin catch
select ERROR_LINE() as '错误行数', ERROR_MESSAGE() as '错误信息'
end catch
/*游标使用*/
use 人事系统
go
select * from 员工表
-- 声明游标
declare 人事_cursor scroll cursor
for
select Name from 员工表
for update
--打开游标
open 人事_cursor
--下一个
declare @name varchar(20)
fetch next from 人事_cursor
into @name
if @@FETCH_STATUS = 0 --可以通过fetch_status 的值来判断是否读取成功,0为成功,-1为失败,-2为不存在
print @name
else
print '提取错误'
go
--最后一个
declare @name varchar(20)
fetch last from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--向前
declare @name varchar(20)
fetch prior from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--第一个
declare @name varchar(20)
fetch first from 人事_cursor
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--具体
declare @name varchar(20)
fetch absolute 5 from 人事_cursor
into @name
if @@FETCH_STATUS = 0
print @name
else
print '提取错误'
go
--关闭游标
close 人事_cursor
--释放游标
deallocate 人事_cursor
/*事务*/
begin transaction 开始事务
commit transaction 提交事务
rollback transaction 回滚事务
save transaction 保存事务
/*事务是可以进行嵌套的*/
begin transaction /*事务后面可以添加事务名称*/
declare @temp varchar(10)
set @temp='汉族'
insert into 员工表(Name, Sector, Salary) values('linukey', '管理部', 100000000)
/*如果这里添加save transaction的话,则无论后面是否成立,这条记录都会插入*/
if @temp='汉族'
begin
commit transaction /*提交记录*/
end
else
rollback transaction /*回滚,不会插入记录*/
/*所谓封锁,就是一个事务可向系统提出请求,对被操作的数据加锁。
其他事务必须等到此事务解锁后才能访问该数据。
从而,在多个用户并发访问数据库时,确保不互相干扰。
可锁定的单位是:行、页、表、盘区、和数据库*/
/*
锁的类型:
1.共享锁(S锁):
用于读操作。
多个事务可封锁一个共享单位的数据。
任何事务都不能修改加s锁的数据。
通常是加s锁的数据被读取完毕,s锁立即被释放。
2.独占锁(X锁):
用于写操作。
仅允许一个事务封锁此共享数据。
其他任何事务必须等到X锁被释放才能对该数据进行访问。
X锁一直到事务结束才能被释放。
3.更新锁(U锁):
用来预定要对此页施加X锁,它允许其他事务读,但不允许再施加U锁或X锁。
当被读取数据页将要被更新时,则升级为X锁。
U锁一直到事务结束时才能被释放。
*/
/*
死锁:....
*/
/*数据类型*/
/*
数据类型
1. 整数数据类型:
Int : 4个字节
Small: Int 2个字节
Tiny Int : 0-255 1个字节
Big Int: 8个字节
2. 二进制数据类型
Binary: 前面加0X作为二进制标识,例如“0Xabc”
定义形式:Binary(n),n=1-8000
n+4个字节
Var Binary: 具有变动长度的特性
3. 浮点数据类型(存储十进制小数)
Real: 精确到7位小数,占4个字节
Float: 精确到15位小数,占8个字节
Numeric: 同Decimal
Decimal: 可以用2-17个字节来存储
decimal(15,5)表示:共15位,其中整数10位,小数5位
4. 逻辑数据类型
Bit: 0/1,输入0/1以外的数被视为1. 占1个字节,不能定义为Null
5. 字符数据类型
Char: char(n),n表示字符所占的存储空间
每个字符或符号占一个字节的存储空间。
若不制定n,那么系统默认为1
ANSI字符
NChar: Unicode字符
每个字符占两个字节的存储空间
VarChar: 同Char,但是其有变动长度的特性。
若输入字符长度>n,那么Varchar和Char都会截掉多余部分
若输入字符长度,那么char的话则系统自动在其后添加空格来填满设定好的空间若输入的数据过长将会截掉其超出部分,varchar不行
NVarChar:与Varchar相似,只是采用Unicode标准字符集
6. 日期和时间数据类型
DateTime: 可以精确到毫秒,占8个字节
SmallDateTime: 精确到分钟,占4个字节
Date: 只存储日期部分,不包括时间
Time: 只存储时间部分,不包括日期
DateTime2:
DateTimeOffSet: 带有时区提示
日期的输入格式:
英文+数字:Jane 21 2012, Oct 1 2010, 2010 May 1, 2010 1 May
数字+分隔符(/ - .):2010/6/22 2010-6-22 2.5.2010
纯数字格式:20100601, 091212, 2008
时间的输入格式:
必须按照小时->分钟->秒->毫秒的顺序,用冒号:隔开
12小时制时加上AM/PM, 不区分大小写
10:23:5.123AM 秒与毫秒之间用.
7. 货币数据类型
需要在数据前加上货币符号
Money: 有4位小数,占8个字节
SmallMoney: 范围比Money小,占4个字节
8. 文本数据类型
存储大量的字符
Text:
NText: 采用Unicode字符集
9. 图像数据类型
存储大量的二进制数据
Image: 同Binary数据一样需要在数据前加"0X"
10. TimeStamp数据类型
每个数据库表中只能有一个TimeStamp数据类型的列。
此类型相当于Binary,VerBinary
当列在更新或插入数据时,此列的值会被自动更新。
11. UniqueIdentifier数据类型
存储16位的二进制数,该数叫作:
GUID(Globally Unique Identifier) 全球唯一鉴别号
由Sql Server2008的函数NewId()产生
12. Geometry数据类型 --基于位置的数据类型
存储x,y,并且支持基于这些值的计算。
基于平面进行计算
13. Geography
存储x,y 并且支持基于这些值的计算
基于地球的实际形状计算
14. Table数据类型
不作为表的列,只能用于T-SQL的变量和用户定义函数的返回值。
*/
/*运算符*/
/*
算数运算符:
+ - * / %
位运算符:
&:位与逻辑运算,从两个表达式中取对应的位。当且仅当输入表达式中两个位的值都为1时,结果中的位才被置为1,否则,结果中的位置为0.
|:位或逻辑运算,从两个表达式中取对应的位。如果输入表达式中两个位只要有一个的值为1时,结果的位就被设置为1;只有当两个位的值为1时,结果的位就被设置为1;只有当两个为的值都为0时,结果中的位才被设置为0;
^:位异或运算,从两个表达式中取对应的位。如果输入表达式中两个位只有一个的值为1时,结果中的位就被设置为1;只有当两个位的值都为0或1时,结果中的位才被设置为0;
比较运算符:
等于:=
大于:>
小于:<
大于等于:>=
小于等于:<=
不等于:<>
不等于:!=
不小于:!<
不大于:!>
逻辑运算符:
ALL:如果一组的比较都为TRUE,则比较结果为TRUE
AND:只有两个布尔表达式都为TRUE,则结果为TRUE
ANY:如果一组的比较重任何一个为TRUE,则结果为TRUE
BETWEEN:如果操作数在某个范围之内,那么结果为TRUE
EXISTS:如果子查询中包含了一些行,那么结果为TRUE
IN:如果操作数等于表达式列表中的一个,那么结果为TRUE
LIKE:如果操作数与某种模式相匹配,那么结果为TRUE
NOT:对任何其他布尔运算符的结果值取反
OR:如果两个布尔表达式中的任何一个为TRUE,那么结果为TRUE
SOME:如果在一组比较中,有些比较为TRUE, 那么结果为TRUE
赋值运算符:
=
连接运算符:
+
一元运算符:
+ 数值为正
- 数值为负
~ 返回数字的逻辑非
*/