T-SQL简介
为了和SQLServer通信和操作存储在SQLServer中的对象,客户程序和存储过程要使用Transact-SQL或T-SQL的结构化查询语言。T-SQL提供了标准1989版本SQL(由美国国家标准机构作为ANSISQL89出版)的许多功能,并给出了允许在语言方面具有更大的可编程性的若干扩展功能。SQL组件包括:数据定义语言(DDL),它创建和放弃数据结构并管理对象级安全性。数据修改语言(DML),它增加、修改和删除表中的数据。数据控制语言(DCL),它负责表数据的安全。T-SQL对标准SQL进行了扩展,增加了程序流控制结构(如if和while)、局部变量和允许DBA创建基于代码的对象,包括存储过程和触发器的其它功能。T-SQL语句是以批处理的形式提交给服务器的。
1
1.1T-SQL一般性介绍1.1.1T-SQL的发展历史简介1.1.2操作对象,一般操作术语(selection,projection,操作对象,一般操作术语(join)及使用的场所)1.1.3命名规则:字符集、排序方式、变量、对象引用命名规则:字符集、排序方式、变量、方式1.1.4操作符算术、字符、位)操作符(算术字符、算术、1.1.5T-SQL对SQL-92标准的扩展一般性介绍:计算标准的扩展一般性介绍:函数、函数、控制结构1.1.6对null的介绍1.1.7ISQL的使用简介的使用简介1.2创建表等对象的语句
创建表、索引、存储过程等的简单语法介绍
2
1.3查询SQL语句的介绍:语句的介绍:1.3.1什么是查询?什么是查询?1.3.2如何去选列1.3.3如何选出唯一结果集1.3.4如何指定表1.3.5如何指定查询条件1.3.6select语句
简单语法:select
from详细语法:select[all|distinct]select_list[into[[database.]owner.]table_name][from[[database.]owner.]{view_name|table_name[(index{index_name|table_name}[parallel[degree_of_parallelism]][prefetchsize][lru|mru])]}[holdlock|noholdlock][shared][,[[database.]owner.]{view_name|table_name[(index{index_name|table_name}[parallel[degree_of_parallelism]][prefetchsize][lru|mru])]}[holdlock|noholdlock][shared]]...][wheresearch_conditions][groupby[all]aggregate_free_expression[,aggregate_free_expression]...][havingsearch_conditions][orderby
3
{[[[database.]owner.]{table_name.|view_name.}]column_name|select_list_number|expression}[asc|desc][,{[[[database.]owner.]{table_name|view_name.}]column_name|select_list_number|expression}[asc|desc]]...][computerow_aggregate(column_name)[,row_aggregate(column_name)]...[bycolumn_name[,column_name]...]][for{readonly|update[ofcolumn_name_list]}][atisolation{readuncommitted|readcommitted|serializable}][forbrowse](1)SQL结果集(2)基于栏的表达式(3)操作选择列表中的栏的名字(4)使用distinct(5)使用select*用where子句过滤行(1)查询条件表达式(2)不等式和字符数据(3)逻辑OR和AND(4)between和数据范围(5)用in(…)列出可能的值(6)带like的通配符用orderby子句排序结果集(1)升序和降序排序(2)通过不出现在选择列表中的栏进行排序
4
检索聚集函数函数sum()avg()min()max()count()count(*)描述求数值表达式之和求数值表达式的平均值返回值最小的数值表达式返回值最大的数值表达式返回非空表达式的数目返回找到的行数
(1)用count(*)数行数(2)用groupby进行子聚集(5)用having过滤结果(6)工作表和聚集函数联结操作1、建立选择列表,给每个栏或表达式命名2、命名含有选择列表中栏的表,以及任何要求与这些表联结的表3、给出联结表的联结条件(1)处理两个以上的表(2)多表查询中*的含义子查询(1)带in的子查询(2)子查询和联结(3)用exists的子查询(4)notexists和notin
5
union(联合)运算(联合)带into的select语句
1.3.7增加、删除、更新语句的一般性说明增加、删除、
insert语句
1.1.1.1插入具体值
1.1.1.2用select插入若干行
1.1.1.3忽略栏列表
delete语句一般删除语句语法deletetablenamefrom…update语句一般更新语句updatesetxx=xxfromxxwhere…SQL中可以使用的常用内部函数Substring()Ltrim()/Rtrim()Convert()Getdate()Isnull()Datepart()Dateadd()Datediff()
6
Round()
1
Bcp语句
1.2一个存储过程的实例说明
ifexists(select1fromsysobjects='up_cm_bkqr''P')
wherenameandtype=
dropprocedureup_cm_bkqrgocreateprocedureup_cm_bkqr/*********************************************************************//*/*/*/*/*/*/*/*SYSTEM:SUBSYS:PROG:TABLE:SUBPROG:DESC:联行行号行名查询DATE:1999.07.02up_cm_bkqrSTSavingSystem*/*/*/*/*/*/*/*/
AUTHOR:JINZHEEDITHISTORY:
/*********************************************************************/@pgrfchar(8)as--inputdeclare@rgcdvarchar(4)declare@usidvarchar(5)declare@pridchar(4)--交易地区码--柜员编号--处理码7
declare@ogbkvarchar(20)declare@ogtpchar(1)
--提出行行号--行号类型
declare@ercdchar(7)declare@ermsvarchar(50)declare@opcdchar(1)declare@eydtchar(8)declare@ognavarchar(40)
--出错码--出错信息--操作码--交易日期--提出行行名
declare@retcodeintbegindeclare@mid_curdatesmalldatetime--取当前帐务日期exec@retcode=up_pc_getaccountdate@mid_curdateoutputif@retcode<>0beginselect@ercd='STB9998'select@erms='执行取帐户日期过程出错'gotoerrorend--帐务时间
--取字段信息select@rgcd=VALUfromPIwherePGRF=@pgrfandFDNM='RGCD'andFDNO=0select@usid=VALUfromPIwherePGRF=@pgrfandFDNM='USID'andFDNO=0select@prid=VALUfromPIwherePGRF=@pgrfandFDNM='PRID'andFDNO=0select@ogbk=rtrim(ltrim(VALU))fromPIwherePGRF=@pgrfandFDNM='OGBK'andFDNO=0select@ogtp=rtrim(ltrim(VALU))fromPIwherePGRF=@pgrfandFDNM='OGTP'andFDNO=0
--检查输入参数的合法性if@ogbkisnullbeginselect@ercd='STB0099'8
select@erms='联行行号不能为空'gotoerrorendif@ogtpisnullbeginselect@ercd='STB0099'select@erms='联行类型不能为空'gotoerrorendif@prid<>'BKQR'beginselect@ercd='STB0031'gotoerrorend--合法行名行号查询处理码
exec@retcode=up_pc_checkauthority@USID=@usid,@PRID=@prid,@TSDT=@mid_curdate,@RTCD=@ercdoutput,@RTMS=@ermsoutputif@ercd<>space(7)gotoerrorif@retcode<>0beginselect@ercd='STB9998'select@erms='执行验证用户权限返回码错'gotoerrorend
select@ogna=UBNMfromUBwhereUBNO=@ogbkandUBTP=@ogtpif@@rowcount<>19
beginselect@ercd='STB9997'select@erms='联行行号('+@ogbk+')不存在'gotoerrorendselect@eydt=convert(char(8),@mid_curdate,112)select@ercd=space(7)gotoreterror:ifltrim(@erms)isnullselect@erms=ERMSfromECwhereERCD=@ercdret:select@ercd,--出错码@erms,--出错信息@rgcd,--交易地区码@prid,--处理码@opcd,--操作码@eydt,--交易日期@ognaEnd--提出行行名SPACE字符串表示成功
10