SQL SERVER2000学习笔记(1)
序:
其实接触SQL SERVER时间并不短,几年前就接触7.0版本,但一直未真正深入学习,基础知识也不够扎实,导致在做CRM项目时设计后台数据库时遇到很多问题,因此拿起资料重新系统进行学习。
视图(View)
视图看上去同表似乎一模一样具有一组命名的字段和数据项,但它其实是一个虚拟
的表,在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和
修改的数据,由此可见视图可以用来控制用户对数据的访问,并能简化数据的显示,即
通过视图只显示那些需要的数据信息。
图表(Diagram)
在SQL Server 中图表其实就是数据库表之间的关系示意图利用它可以编辑表与表
之间的关系
触发器(Trigger)
触发器是一个用户定义的SQL 事务命令的集合,当对一个表进行插入更改删除
时这组命令就会自动执行。
存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在
数据库中的SQL 程序。
范 式
构造数据库必须遵循一定的规则,在关系数据库中这种规则就是范式范式。是符合
某一种级别的关系模式的集合,关系数据库中的关系必须满足一定的要求,即满足不同的
范式。目前关系数据库有六种范式:第一范式1NF、 第二范式2NF 、第三范式3NF
、第四范式4NF、 第五范式5NF 和第六范式6NF 。满足最低要求的范式是第一
范式1NF, 在第一范式的基础上进一步满足更多要求的称为第二范式2NF, 其余
范式以此类推,一般说来数据库只需满足第三范式3NF 就行。
1NF:简而言之就是无重复的列
2NF:就是非主属性非部分依赖于主关键字
3NF:就是属性不依赖于其它非主属性
NCHAR类型
NCHAR 类型采用UNICODE 标准字符集(Character Set UNICODE ),标准规定每个字符占用两个字节的存储空间,所以它比非UNICODE 标准的数据类型多占用一倍的存储空间。使用UNICODE 标准的好处是因其使用两个字节做存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内。在一个数据列中就可以同时出现中文、英文、法文、德文等而不会出现编码冲突。
TIMESTAMP类型
TIMESTAMP数据类型提供数据库范围内的惟一值,此类型相当于BINARY 8 或VARBINARY 8, 但当它所定义的列在更新或插入数据行时此列的值会被自动更新,一个计数值将自动地添加到此TIMESTAMP数据列中。每个数据库表中只能有一个TIMESTAMP数据列,如果建立一个名为TIMESTAMP 的列,则该列的类型将被自动设为TIMESTAMP数据类型。
局部变量
局部变量必须以@ 开头,而且必须先用DECLARE 命令说明后才可使用。其说明形式如下:
DECLARE @变量名 变量类型 [ @变量名 变量类型]
注意:如果变量为字符型,那么必须指定变量的长度,否则系统默认其长度为1
其中变量类型可以是SQL Server 2000 支持的所有数据类型,也可以是用户自定义的数据类型。在Transact-SQL 中不能像在一般的程序语言中一样使用变量=变量值来给变量赋,值必须使用SELECT 或SET 命令来设定变量的值其语法如下:
SELECT @局部变量 = 变量值
SET @局部变量= 变量值
例如声明一个长度为10 个字符的变量id 并赋值
declare @id char 10
select @id = ’10010001’
全局变量
全局变量不是由用户程序定义的,必须在服务器级定义引用全局变量时必须以@ @开头,且局部变量的名称不能与全局变量名相同。
Transact-SQL 的通配符
通配符 功 能 实 例
% 代表零个或多个字符 ‘ab%’ ’ab’后可接任意字符串
_ 代表一个字符 ‘ a_b’ ’a’与’b’之间可以有一个字符
[ ] 表示在某一范围的字符 [0-9] 0 到9 之间的字符
[^ ] 表示不在某一范围的字符 [^0~9] 不在0 到9 之间的字符
CASE语法
CASE 命令有两种语句格式
1、
CASE <运算式>
WHEN <运算式> THEN <运算式>
WHEN <运算式> THEN <运算式>
[ELSE <运算式>]
END
2、
CASE
WHEN <条件表达式> THEN <运算式>
WHEN <条件表达式> THEN <运算式>
[ELSE <运算式>]
END
CASE 命令可以嵌套到SQL 命令中
例如调整员工工资,工作级别为1 的上调8%, 工作级别为2 的上调7%,工作级别为3 的上调6%, 其它上调5%
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
end
WHILE 语法
WHILE <条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
WHILE 命令在设定的条件成立时会重复执行命令行或程序块,CONTINUE 命令可以
让程序跳过CONTINUE 命令之后的语句回到WHILE 循环的第一行命令,BREAK 命令
则让程序完全跳出循环结束WHILE 命令的执行,WHILE 语句也可以嵌套
例如:
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c =100 * @x+ @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
运行结果如下
1
101
102
2
201
202
WAITFOR语句
其语法如下
WAITFOR {DELAY <‘时间’> | TIME <‘时间’>
| ERROREXIT | PROCESSEXIT | MIRROREXIT}
WAITFOR 命令用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时间已到才继续往下执行,其中时间必须为DATETIME 类型的数据如11:15:27,但不能包括日期各关键字,含义如下:
DELAY 用来设定等待的时间最多可达24 小时
TIME 用来设定等待结束的时间点
ERROREXIT 直到处理非正常中断
PROCESSEXIT 直到处理正常或非正常中断
MIRROREXIT 直到镜像设备失败
例如等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee
例如等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select * from employee
CHECKPOINT
CHECKPOINT 命令用于将当前工作的数据库中被更改过的数据页data page 或日
志页log page 从数据缓冲器data buffer cache 中强制写入硬盘
READTEXT
READTEXT 命令语法如下
READTEXT {table.column text_pointer offset size} [HOLDLOCK]
READTEXT 命令用于从数据类型为TEXT NTEXT 或IMAGE 的列中读取数据,命令从偏移位置offset+1 个字符起读取size 个字符,如果size 为0 则会读取4KB 的数据,其中text_pointer 是指向存储文本的第一个数据库页的指针,它可以用TEXTPTR函数来获取,HOLDLOCK 选项用于锁定所读取的数据直到传输结束这段时间内,其它用户只能读取数据不能更改数据
例如
use pangu
declare @t_pointer varbinary 16
select @t_pointer = textptr d_intro
from department
where d_name = '技术部'
readtext department.d_intro @t_pointer 0 42
其实接触SQL SERVER时间并不短,几年前就接触7.0版本,但一直未真正深入学习,基础知识也不够扎实,导致在做CRM项目时设计后台数据库时遇到很多问题,因此拿起资料重新系统进行学习。
视图(View)
视图看上去同表似乎一模一样具有一组命名的字段和数据项,但它其实是一个虚拟
的表,在数据库中并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和
修改的数据,由此可见视图可以用来控制用户对数据的访问,并能简化数据的显示,即
通过视图只显示那些需要的数据信息。
图表(Diagram)
在SQL Server 中图表其实就是数据库表之间的关系示意图利用它可以编辑表与表
之间的关系
触发器(Trigger)
触发器是一个用户定义的SQL 事务命令的集合,当对一个表进行插入更改删除
时这组命令就会自动执行。
存储过程(Stored Procedure)
存储过程是为完成特定的功能而汇集在一起的一组SQL 程序语句,经编译后存储在
数据库中的SQL 程序。
范 式
构造数据库必须遵循一定的规则,在关系数据库中这种规则就是范式范式。是符合
某一种级别的关系模式的集合,关系数据库中的关系必须满足一定的要求,即满足不同的
范式。目前关系数据库有六种范式:第一范式1NF、 第二范式2NF 、第三范式3NF
、第四范式4NF、 第五范式5NF 和第六范式6NF 。满足最低要求的范式是第一
范式1NF, 在第一范式的基础上进一步满足更多要求的称为第二范式2NF, 其余
范式以此类推,一般说来数据库只需满足第三范式3NF 就行。
1NF:简而言之就是无重复的列
2NF:就是非主属性非部分依赖于主关键字
3NF:就是属性不依赖于其它非主属性
NCHAR类型
NCHAR 类型采用UNICODE 标准字符集(Character Set UNICODE ),标准规定每个字符占用两个字节的存储空间,所以它比非UNICODE 标准的数据类型多占用一倍的存储空间。使用UNICODE 标准的好处是因其使用两个字节做存储单位,其一个存储单位的容纳量就大大增加了,可以将全世界的语言文字都囊括在内。在一个数据列中就可以同时出现中文、英文、法文、德文等而不会出现编码冲突。
TIMESTAMP类型
TIMESTAMP数据类型提供数据库范围内的惟一值,此类型相当于BINARY 8 或VARBINARY 8, 但当它所定义的列在更新或插入数据行时此列的值会被自动更新,一个计数值将自动地添加到此TIMESTAMP数据列中。每个数据库表中只能有一个TIMESTAMP数据列,如果建立一个名为TIMESTAMP 的列,则该列的类型将被自动设为TIMESTAMP数据类型。
局部变量
局部变量必须以@ 开头,而且必须先用DECLARE 命令说明后才可使用。其说明形式如下:
DECLARE @变量名 变量类型 [ @变量名 变量类型]
注意:如果变量为字符型,那么必须指定变量的长度,否则系统默认其长度为1
其中变量类型可以是SQL Server 2000 支持的所有数据类型,也可以是用户自定义的数据类型。在Transact-SQL 中不能像在一般的程序语言中一样使用变量=变量值来给变量赋,值必须使用SELECT 或SET 命令来设定变量的值其语法如下:
SELECT @局部变量 = 变量值
SET @局部变量= 变量值
例如声明一个长度为10 个字符的变量id 并赋值
declare @id char 10
select @id = ’10010001’全局变量
全局变量不是由用户程序定义的,必须在服务器级定义引用全局变量时必须以@ @开头,且局部变量的名称不能与全局变量名相同。
Transact-SQL 的通配符
通配符 功 能 实 例
% 代表零个或多个字符 ‘ab%’ ’ab’后可接任意字符串
_ 代表一个字符 ‘ a_b’ ’a’与’b’之间可以有一个字符
[ ] 表示在某一范围的字符 [0-9] 0 到9 之间的字符
[^ ] 表示不在某一范围的字符 [^0~9] 不在0 到9 之间的字符
CASE语法
CASE 命令有两种语句格式
1、
CASE <运算式>
WHEN <运算式> THEN <运算式>
WHEN <运算式> THEN <运算式>
[ELSE <运算式>]
END
2、
CASE
WHEN <条件表达式> THEN <运算式>
WHEN <条件表达式> THEN <运算式>
[ELSE <运算式>]
END
CASE 命令可以嵌套到SQL 命令中
例如调整员工工资,工作级别为1 的上调8%, 工作级别为2 的上调7%,工作级别为3 的上调6%, 其它上调5%
use pangu
update employee
set e_wage =
case
when job_level = ’1’ then e_wage*1.08
when job_level = ’2’ then e_wage*1.07
when job_level = ’3’ then e_wage*1.06
else e_wage*1.05
endWHILE 语法
WHILE <条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
WHILE 命令在设定的条件成立时会重复执行命令行或程序块,CONTINUE 命令可以
让程序跳过CONTINUE 命令之后的语句回到WHILE 循环的第一行命令,BREAK 命令
则让程序完全跳出循环结束WHILE 命令的执行,WHILE 语句也可以嵌套
例如:
declare @x int @y int @c int
select @x = 1 @y=1
while @x < 3
begin
print @x --打印变量x 的值
while @y < 3
begin
select @c =100 * @x+ @y
print @c --打印变量c 的值
select @y = @y + 1
end
select @x = @x + 1
select @y = 1
end
运行结果如下
1
101
102
2
201
202WAITFOR语句
其语法如下
WAITFOR {DELAY <‘时间’> | TIME <‘时间’>
| ERROREXIT | PROCESSEXIT | MIRROREXIT}
WAITFOR 命令用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时间已到才继续往下执行,其中时间必须为DATETIME 类型的数据如11:15:27,但不能包括日期各关键字,含义如下:
DELAY 用来设定等待的时间最多可达24 小时
TIME 用来设定等待结束的时间点
ERROREXIT 直到处理非正常中断
PROCESSEXIT 直到处理正常或非正常中断
MIRROREXIT 直到镜像设备失败
例如等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee例如等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select * from employeeCHECKPOINT
CHECKPOINT 命令用于将当前工作的数据库中被更改过的数据页data page 或日
志页log page 从数据缓冲器data buffer cache 中强制写入硬盘
READTEXT
READTEXT 命令语法如下
READTEXT {table.column text_pointer offset size} [HOLDLOCK]
READTEXT 命令用于从数据类型为TEXT NTEXT 或IMAGE 的列中读取数据,命令从偏移位置offset+1 个字符起读取size 个字符,如果size 为0 则会读取4KB 的数据,其中text_pointer 是指向存储文本的第一个数据库页的指针,它可以用TEXTPTR函数来获取,HOLDLOCK 选项用于锁定所读取的数据直到传输结束这段时间内,其它用户只能读取数据不能更改数据
例如
use pangu
declare @t_pointer varbinary 16
select @t_pointer = textptr d_intro
from department
where d_name = '技术部'
readtext department.d_intro @t_pointer 0 42
浙公网安备 33010602011771号