康索特软件有限公司 SQL Server 2005数据库技能培训
4.2.3 删除视图
DROP VIEW sales_staff
五 存储过程(了解)
5.1 结构 5.1.1 统计存储过程
5.1.2 查询存储过程
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
5.2 注意的地方 5.2.1 变量申明和赋值
DECLARE @starttime DATETIME, -- 申明变量1 @endtime VARCHAR(20), -- 申明变量1 ….. -- 申明其他变量 SELECT @starttime = getdate() -- 赋值语句 或者:
SET @starttime = getdate() -- SET也可以赋值
5.2.2 控制语句
1. IF 判断语句
IF NOT EXISTS(SELECT TOP 1 billindex FROM table1) Return 注意: 由于用了exists关键字,索引该语句为判断表中是否有数据的最优写法。 2. WHILE 循环语句
3. CASE WHEN 语句
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
5.2.3 内部函数
具体见“6.1内部函数”
5.2.4 链接查询
1. 首先要建立链接服务器,具体操作见“2.2.7添加链接服务器”。 2. 链接查询语法:
SELECT @startid = minid
FROM OPENQUERY(CDSzxin,
'select min(synclogindex) minid from zxdbm_ismp.sync_info_log')
注意:
1) CDSzxin为链接服务器名。
2) 蓝色部分的表为链接服务器中的表。
5.2.5 临时表
-- 固定写法:
IF OBJECT_ID('tempdb..#subtemptb') IS NOT NULL
DROP TABLE #subtemptb CREATE TABLE #subtemptb(……)
5.2.6 动态SQL
语法:
1. 申明变量; 2. 为该变量赋值; 3. 执行变量。 举例:
DECLARE @sql varchar(2000) --申明变量 SELECT @sql = 'INSERT INTO …' -- 赋值 EXEC (@sql) -- 执行
5.2.7 外赋值语句
语法:
DECLARE @count BIGINT
SET @sql = 'SELECT @ret=COUNT(1) FROM ' + @table -- 必须为@ret(内部变量) EXEC sp_executesql @sql, N'@ret BIGINT OUTPUT', @ret = @count OUTPUT
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
5.2.8 核心查询语句
主要是分组统计语句: SELECT @sqlStr = 'INSERT INTO dbo.rpt122SpServiceProductlogStat (timevalue,resultcode,messagetype,vacnum)'
+ ' SELECT * from openQuery(CDSzxin,''select substr(synctime,1,8),' + 'resultcode,' + 'messagetype,'
+ 'COUNT(resultcode)'
+ ' FROM zxdbm_ismp.sync_info_log' + ' WHERE interfaceflag=0'
+ ' AND synclogindex >= ' + @start_id + ' AND synclogindex <' + @end_id
+ ' GROUP BY substr(synctime,1,8),resultcode,messagetype'')' EXEC ( @sqlStr)
5.2.9 异常捕获机制
语法:
5.2.10 事务处理机制
放在try块内部,且必须在小范围查询内使用:
5.2.11 日志记录机制
包含:
1. 记录成功采集的日志,成功后记录采集结束时间或者结束索引ID。 2. 记录失败采集的日志,失败后记录采集失败的错误原因。 作用:
1. 避免漏采数据; 2. 避免重采数据; 3. 提高采集效率;
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489
康索特软件有限公司 SQL Server 2005数据库技能培训
4. 方便查找失败原因。
5.3 内部存储过程 5.3.1 sp_executesql
外赋值:对动态sql中变量进行赋值操作。 语法:
DECLARE @count BIGINT
SET @sql = 'SELECT @ret=COUNT(1) FROM ' + @table -- 必须为@ret(内部变量) EXEC sp_executesql @sql, N'@ret BIGINT OUTPUT', @ret = @count OUTPUT
5.3.2 sp_rename
更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。 1. 重命名表下例将表 customers 重命名为custs。 EXEC sp_rename 'customers', 'custs'
2. 重命名列下例将表 customers 中的列 contact title 重命名为title。 EXEC sp_rename 'customers.[contact title]', 'title', 'COLUMN'
5.3.3 sp_configure
远程查询超时:此选项用于设置SQL Server在判定远程查询失败,并产生超时错误之前,应当等待的秒数。
用法:EXEC sp_configure 'remote query timeout',0
5.4 存储过程的好处 5.4.1 重复使用
存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
5.4.2 提高性能
存储过程在创建的时候就进行了编译,将来使用的时候不用再重新编译。一般的SQL语句每执行一次就需要编译一次,所以使用存储过程提高了效率。
5.4.3 减少网络流量
存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
5.4.4 安全性
地址:武汉洪山区武大科技园兴业楼南楼二单元402室 电话:027-87970489