免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: tigerfish
打印 上一主题 下一主题

SQL Server数据库技术 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-05-27 01:04 |只看该作者
4.4.2 全局变量
全局变量是SQL Server系统内部使用的变量,其作用范围并不局限于某一程序,而是任何程序均可随时调用全局变量通常存储一些SQL Server的配置设定值和效能统计数据。用户可在程序中用全局变量来测试系统的设定值或Transact-SQL命令执行后的状态值。有关SQL Server 全局变量的详细情况请参见附录。

注意:全局变量不是由用户的程序定义的,它们是在服务器级定应义的。只能使用预先说明及定义的变局变量。引用全局变量时,必须以“@@”开头。局部变量的名称不能与全局变量的名称相同、否则会在应用中出错。

论坛徽章:
0
32 [报告]
发表于 2006-05-27 01:05 |只看该作者
4.5.1 注释符(Annotation)
在Transact-SQL 中可使用两类注释符。
ANSI 标准的注释符“--” 用于单行注释;
与C语言相同的程序注释符号,即“/**/”。“/*”用于注释文字的开头,“*/”用于注释文字的结尾,可在程序中标识多行文字为注释。

4.5.2 运算符(Operator)
    1 算术运算符
包括:+(加)、―(减)、(乘)、(除)、%(取余)
    2 比较运算符
包括:>(大于)<(小于)、= (等于)、>=(大于等于)、<=(小于等于)、<>
(不等于)、!=(不等于)、!>(不大于)!<( 不小于)
其中!=、!>、!<不是ANSI标准的运算符。
    3 逻辑运算符
包括:AND(与)、OR(或)、NOT(非)
    4 位运算符
包括:按位与、|(按位或)、~(按位非)^(按位异或)
    5 连接运算符
连接运算符“+”用于连接两个或两个以上的字符或二进制串、列名或者串和列的混合体,将一个串加入到另一个串的末尾。其语法如下:
+
例4-7
use pangu
declare@startdate datetime
set@startdate=‘1/1/2000’
select‘Start Date:’+convert(varchar(12)@startdate)
--convert()函数用于转换数据类型,见4.8.4
运行结果如下:
Start Date:Jan 1 2000
例4-8:
use pangu
select‘月薪最高的员工是:‘+ e_name+’月薪为:‘+convert(varchar(10)e_wage
from employee
where e_wage=
(select max (e_wage)
from employee)
运行结果如下:
月薪最高的员工是:张三月薪为8000.00
(1 row (s) affected)
在Transact-SQL中运算符的处理顺序如下所示,如果相同层次的运算出现在一起时则处理顺序位从左到右。

括号 ()
位运算符 ~
算术运算符 *、/、%
算术运算符 +、-
位运算符 ^
位运算符 &
位运算符 |
逻辑运算符 NOT\\
逻辑运算符 AND
逻辑运算符 OR
4.5.3 通配符Wildcard
在SQL Server中可以使用如表4-4所示的通配符。

表4-4 Transact-SQL的通配符

论坛徽章:
0
33 [报告]
发表于 2006-05-27 01:05 |只看该作者
Transact-SQL 语言使用的流程控制命令与常见的程序设计语言类似主要有以下几种控制命令。

4.6.1 IF…ELSE
其语法如下:
IF <条件表达式>
<命令行或程序块>
[ELSE [条件表达式]
<命令行或程序块>]
其中<条件表达式>可以是各种表达式的组合,但表达式的值必须是逻辑值“真”或“假”。ELSE子句是可选的,最简单的IF语句没有ELSE子句部分。IF…ELSE用来判断当某一条件成立时执行某段程序,条件不成立时执行另一段程序。如果不使用程序块,IF或ELSE只能执行一条命令。IF…ELSE可以进行嵌套。

例4-9
declare@x int,@y int,@z int
select @x=1,@y=2, @z=3
if@x>@y
  print\'x>y\' --打印字符串\'x>y\'
else if@y>@z
print\'y>z\'
    else print\'z>y\'
运行结果如下
z>y
注意:在Transact-SQL中最多可嵌套32级。

4.6.2 BEGIN…END
其语法如下:
BEGIN
<命令行或程序块>
END
BEGIN…END用来设定一个程序块,将在BEGIN…END内的所有程序视为一个单元执行BEGIN…END经常在条件语句,如IF…ELSE中使用。在BEGIN…END中可嵌套另外的BEGIN…END来定义另一程序块。

4.6.3 CASE
CASE 命令有两种语句格式:
CASE <运算式>
WHEN <运算式>THEN<运算式>

WHEN<运算式>THEN<运算式>
[ELSE<运算式>]
END

CASE
WHEN <条件表达式> THEN <运算式>
WHEN <条件表达式> THEN <运算式>
[ELSE <运算式>]
END
CASE命令可以嵌套到SQL命令中。
例4-10:调整员工工资,工作级别为“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
注意:执行CASE子句时,只运行第一个匹配的子名。

论坛徽章:
0
34 [报告]
发表于 2006-05-27 01:06 |只看该作者
4.6.4 WHILE…CONTINUE…BREAK
其语法如下:
WHILE <条件表达式>
BEGIN
<命令行或程序块>
[BREAK]
[CONTINUE]
[命令行或程序块]
END
WHILE 命令在设定的条件成立时会重复执行命令行或程序块。CONTINUE命令可以让程序跳过CONTINUE 命令之后的语句,回到WHILE 循环的第一行命令。BREAK 命令则让程序完全跳出循环,结束WHILE 命令的执行。WHILE 语句也可以嵌套。

例4-11:
declare @x int @y int @c int
例4-11:
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

4.6.5 WAITFOR
其语法如下:
WAITFOR {DELAY <‘时间’> | TIME <‘时间’>
| ERROREXIT | PROCESSEXIT | MIRROREXIT}
WAITFOR 命令用来暂时停止程序执行,直到所设定的等待时间已过或所设定的时间已到才继续往下执行。其中‘时间’必须为DATETIME 类型的数据,如:‘11:15:27’,
但不能包括日期各关键字含义如下:


DELAY 用来设定等待的时间最多可达24 小时;
TIME 用来设定等待结束的时间点;
ERROREXIT 直到处理非正常中断;
PROCESSEXIT 直到处理正常或非正常中断;
MIRROREXIT 直到镜像设备失败。
例4-12 等待1 小时2 分零3 秒后才执行SELECT 语句
waitfor delay ’01:02:03’
select * from employee

例4-13:等到晚上11 点零8 分后才执行SELECT 语句
waitfor time ’23:08:00’
select * from employee

4.6.6 GOTO
语法如下:
GOTO 标识符
GOTO 命令用来改变程序执行的流程,使程序跳到标有标识符的指定的程序行再继续往下执行。作为跳转目标的标识符可为数字与字符的组合,但必须以“:”结尾,如‘12:’或‘a_1:’。在GOTO 命令行,标识符后不必跟“:”。
例4-14 分行打印字符‘1’、‘2’、‘3’、‘4’、‘5’
declare @x int
select @x = 1
label_1
print @x
select @x = @x + 1
while @x < 6
goto label_1

4.6.7 RETURN
语法如下
RETURN [整数值]
RETURN 命令用于结束当前程序的执行,返回到上一个调用它的程序或其它程序。在括号内可指定一个返回值。
例4-15
declare @x int @y int
select @x = 1 @y = 2
if x>y
return 1
else
return 2
如果没有指定返回值,SQL Server 系统会根据程序执行的结果返回一个内定值,

论坛徽章:
0
35 [报告]
发表于 2006-05-27 01:08 |只看该作者
4.7.1 BACKUP
BACKUP 命令用于将数据库内容或其事务处理日志备份到存储介质上(软盘、硬盘、磁带)。等SQL Server 7.0 以前的版本用的是DUMP 命令来执行此功能,从SQL Server 2000起,不再使用DUMP 命令。关于BACKUP 命令的详情请参见“数据备份与恢复”章节。
    4.7.2 CHECKPOINT
语法如下:
CHECKPOINT
CHECKPOINT 命令用于将当前工作的数据库中被更改过的数据页data page 或日志页(log page)从数据缓冲器(data buffer cache)中强制写入硬盘。
    4.7.3 DBCC
DBCC Database Base Consistency Checker,数据库一致性检查程序)命令用于验证数据库完整性、查找错误、分析系统使用情况等。
DBCC 命令后必须加上子命令,系统才知道要做什么。如DBCC CHECKALLOC 命令检查目前数据库内所有数据页的分配和使用情况。
关于DBCC 命令的详情,请参见附录。

    4.7.4 DECLARE
语法如下:
DECLARE {{ @local_variable data_type }
| { @cursor_variable_name CURSOR }
| { table_type_definition }
} [,...n]]
DECLARE 命令用于声明一个或多个局部变量、游标变量或表变量。在用DECLARE命令声明之后,所有的变量都被赋予初值NULL。需要用SELECT 或SET命令来给变量赋值。变量类型可为系统定义的或用户定义的类型,但不能为TEXT、NTEXT、IMAGE类型。CURSOR 指名变量是局部的游标变量。
例4-16
declare @x float @y datetime
select @x = pi @y = getdate
print @x
print @y
运行结果如下:
3.14159
Jun 17 2000 4:32PM
注意:如果变量为字符型,那么在data_type表达中应指明
其最大长度,否则系统认为其长度为1。
例4-17
declare @x char @y char 10
select @x = \'123\' @y = \'data_type\'
print @x
print @y
运行结果如下
1
data_type

论坛徽章:
0
36 [报告]
发表于 2006-05-27 01:09 |只看该作者
4.7.5 EXECUTE
EXECUTE 命令用来执行存储过程,其具体用法请参见“存储过程”章节。
     4.7.6 KILL
KILL 命令用于终止某一过程的执行,其具体用法请参见“存储过程”章节。
    4.7.7 PRINT
语法如下:
PRINT \'any ASCII text\' | @local_variable | @@FUNCTION | string_expression
PRINT 命令向客户端返回一个用户自定义的信息,即显示一个字符串(最长为255个字符)、局部变量或全局变量。如果变量值不是字符串的话,必须先用数据类型转换函数CONVERT(),将其转换为字符串。其中,string_expression 是可返回一个字符串的表达式。表达式的长度可以超过8000 个字符,但超过8000 的字符将不会显示。
例4-18:
declare @x char 10 @y char 10
select @x = \'SQL\' @y = \'Server\'
print \'科技\'
print @x + @y

运行结果如下:
科技
SQL Server

   4.7.8 RAISERROR
RAISERROR 命令用于在SQL Server 系统返回错误信息时,同时返回用户指定的信息。其具体用法请参见“存储过程”章节。
    4.7.9 READTEXT
READTEXT 命令语法如下
READTEXT {table.column text_pointer offset size} [HOLDLOCK]
READTEXT 命令用于从数据类型为TEXT、NTEXT 或IMAGE 的列中读取数据。命令从偏移位置offset+1 个字符起读取size 个字符,如果size 为0, 则会读取4KB 的数据。其中text_pointer 是指向存储文本的第一个数据库页的指针,它可以用TEXTPTR()函数来获取。关于TEXTPTR ()函数的使用请参见“4.8.7 TEXT 和IMAGE 函数”。HOLDLOCK 选项用于锁定所读取的数据直到传输结束,这段时间内,其它用户只能读取数据,不能更改数据。
例4-19:
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
运行结果如下:
d_intro
--------------------------------------------------------------------
进行技术研究与开发,提供最新的技术动态信息
(1 row (s) affected)

注意:如果数据列为汉字,则offset值应取o或其它偶数,如果用奇数,则会出现乱码

论坛徽章:
0
37 [报告]
发表于 2006-05-27 01:10 |只看该作者
4.7.10 RESTORE
RESTORE 命令用来将数据库或其事务处理日志备份文件由存储介质回存到SQL Server系统中。SQL Server 7.0 以前的版本用的是LOAD命令来执行此功能,从SQL Server 2000起,不再使用LOAD 命令。关于RESTORE 命令的详情,请参见“数据备份与恢复”章节
    4.7.11 SELECT
SELECT 命令可用于给变量赋值其语法如下:
SELECT {@local_variable = expression } [ ...n]
SELECT 命令可以一次给多个变量赋值。当表达式expression 为列名时,SELECT 命令可利用其查询功能一次返回多个值,变量中保存的是其返回的最后一个值。如果SELECT命令没有返回值,则变量值仍为其原来的值。当表达式expression 是一个子查询时,如果子查询没有返回值则变量被设为NULL。
例4-20:
use pangu
declare @x char (30)
select @x = \'CPU\'
select @x = d_name
from department
where dept_id = 9999
select @x
运行结果如下:
-----------------------
CPU
例4-21:
use pangu
declare @x char 30
select @x = \'Main Board\'
select @x = (select d_name
from department
where dept_id=9999)
select @x
运行结果如下
-----------------------
NULL

4.7.12 SET
SET 命令有两种用法:
1 用于给局部变量赋值
其语法如下:
SET { {@local_variable = expression} | { @cursor_variable =
{ @cursor_variable cursor_name
| { CURSOR
[FORWARD_ONLY | SCROLL]
[STATIC | KEYSET | DYNAMIC | FAST_FORWARD]
[READ_ONLY | SCROLL_LOCKS | OPTIMISTIC]
[TYPE_WARNING]
FOR select_statement
[FOR {READ ONLY
| UPDATE [OF column_name [ ...n]] } ] } } } }
其中的CURSOR 等参数将在“游标”一章中讲述。
在用DECLARE 命令声明之后,所有的变量都被赋予初值NULL。 需要用SET 命令来给变量赋值。但与SELECT 命令不同的是,SET 命令一次只能给一个变量赋值。不过由于SET 命令功能更强,且更严密,因此,SQL Server 推荐使用SET 命令来给变量赋值。

论坛徽章:
0
38 [报告]
发表于 2006-05-27 01:11 |只看该作者
例4-22
declare @x char (30)
set @x = \'This is a SET command.\'
select @x
运行结果如下
------------------------------
This is a SET command.
例4-23
use pangu
declare @department_num int @x char (10)
set @department_num = select count (*)
from department)
set @x = \'部门数目\'
print @x
select @department_num
运行结果如下
部门数目
-----------
7

2 用于设定用户执行SQL 命令,时SQL Server 的处理选项设定
有以下几种设定方式:

SET 选项ON
SET 选项OFF
SET 选项值
关于此类SET 命令的详情,请参见附录。
语法如下
SHUTDOWN [WITH NOWAIT]
SHUTDOWN 命令用于停止SQL Server 的执行,当使用NOWAIT 参数时,SHUTDOWN命令立即停止SQL Server,在终止所有的用户过程并对每一现行的事务发生一个回滚后,退出SQL Server。当没有用NOWAIT 参数时,SHUTDOWN 命令将按以下步骤执行:
(1) 终止任何用户登录SQL Server。
(2) 等待尚未完成的Transact-SQL 命令或存储过程执行完毕。
(3) 在每个数据库中执行CHECKPOINT 命令
(4) 停止SQL Server 的执行
例4-24
shutdown with nowait
运行结果如下:
------------------------------
Changed language setting to us_english.
Server shut down by request.
SQL Server is terminating this process.
停止SQL Server 的执行的方法还有好几种,我们将在“企业管理器EnterpriseManager” 章节中介绍。

    4.7.14 WRITETEXT
语法如下:
WRITETEXT {table.column text_pointer} [WITH LOG] {data}
WRITETEXT 命令用于向数据类型为TEXT、 NTEXT 或IMAGE 的列中读取数据。其中text_pointer 是指向存储文本的第一个数据库页的指针,它可以用TEXTPTR()来获取。关于TEXTPTR 函数的使用请参见“4.8.7 TEXT 和IMAGE 函数”。WOTH LOG选项用于记录所写入的数据。data 可为文字或变量,其最大长度为120KB。注意:WRITETEXT命令不能作用于视图。

推荐使用UPDATETEXT 命令来修改TEXT、NTEXT 和IMAGE 类型的数据。因为WRITETEXT 命令将数据列的数据完全替换,而UPDATETEXT 命令可以只更改数据列的一部分。关于UPDATETEXT 命令的使用将在“数据库更新”章节中讲述。
例4-25
declare @t_pointer binary (16)
use pangu
select @t_pointer = textptr d_intro
from department
where d_name = \'技术部\'
writetext department.d_intro @t_pointer \'进行技术研究与开发提供最新的技术动态信息\'

    4.7.15 USE
语法如下
USE {databasename}
USE 命令用于改变当前使用的数据库为指定的数据库。用户必须是目标数据库的用户成员或目标数据库建有GUEST 用户账号时,使用USE 命令才能成功切换到目标数据库。

论坛徽章:
0
39 [报告]
发表于 2006-05-27 01:12 |只看该作者
统计函数是在数据库操作中时常使用的函数,又称为基本函数或集函数,常用的统计函数如表4-6 所示.







这些函数通常用在SELECT 子句中,作为结果数据集的字段返回的结果。在SELECT语句的SELECT 子句中使用函数的语法如下:
    SELECT 函数名(列名1 或*),...函数名(列名n)
    FROM 表名

提醒:函数的对象或自变量必须包括在圆括号内。如果函数需要一个以上的自变量,可用逗号隔开各个自变量。

1、AVG()
    AVG() 函数返回有关列值的算术平均值。此函数只适用数值型的列。其语法如下:





    例4-26: 求各部门的平均工资







    运行结果如下:











2、COUNT()
    COUNT() 函数返回与选择表达式匹配的列中不为NULL 值的数据个数。COUNT()函数的语法如下:





    例4-27: 计算企业的部门数目






提醒:如果用COUNT()函数引用一个列名,则返回列值的个数。

    COUNT() 函数在计算中重复计算了相同的值。如果使用了关键字DISTINCT, 则COUNT() 函数就返回行惟一值的个数。
    如果在SELECT 子句的列名位置上使用符号(*), 即使用COUNT (*), 则指定了与SELECT 语句的判别式匹配的所有行,COUNT()函数将计算字段的行数,包括为NULL值的行。

    例4-28: 列出员工少于3 人的部门编号

论坛徽章:
0
40 [报告]
发表于 2006-05-27 01:12 |只看该作者
3、MAX()
    MAX() 函数返回某一列的最大值。此函数适用于数值型、字符型、和日期型的列。对于列值为NULL 的列,MAX() 函数不将其列为对比的对象。其语法如下:





    例4-29: 求工资最高的员工姓名






4、MIN()
    MIN() 函数返回某一列的最小值。此函数适用于数值型、字符型、和日期型的列。对于列值为NULL 的列,MIN() 函数不将其列为对比的对象。其语法如下:





    例4-30: 求最资深的员工姓名











5、SUM()
    SUM() 函数用来返回诸如列值这样的实体的总和。此函数只适用于数值型的列,不包括NULL 值。其语法如下:





    例4-31: 求各部门的员工工资总额





    可以在一个语句中使用多个函数。
    例4-32: 求员工工资的最大值、最小值、平均值











除了上述常用的函数外,统计函数还有以下几种:

6、STDEV()
    STDEV() 函数语法如下:





    STDEV() 函数返回表达式中所有数据的标准差(Statistical Standard Deviation)。表达式通常为表的某一数据类型为NUMERIC 的列(或近似NUMERIC 类型的列,如MONEY 类型,但BIT 类型除外)。表达式中的NULL 值将被忽略。其返回值为FLOAT类型。






7、STDEVP()
    STDEVP() 函数语法如下:





   STDEVP() 函数返回总体标准差(Statistical Standard Deviation for The Population)。表达式及返回值类型同STDEV() 函数。






8、VAR()
    VAR() 函数语法如下:





    VAR() 函数返回表达式中所有值的统计变异数(Statistical Variance)。 表达式及返回值类型同STDEV() 函数。






9、VARP()
    VARP() 函数语法如下:





    VARP() 函数返回总体变异数(Statistical Variance for The Population)。 表达式及返回值类型同STDEV() 函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP