加入收藏 | 设为首页 | 会员中心 | 我要投稿 温州站长网 (https://www.0577zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

T-SQL设计模式详解

发布时间:2016-09-10 10:49:49 所属栏目:MsSql教程 来源:站长网
导读:一、ITERATOR(迭代) 这种模式提供一种在相似对象列表中遍历对象的标准化方法。在SQL Server数据库中的同义词是游标。 DECLARE tables CURSOR FOR select TABLE_
一、ITERATOR(迭代)

这种模式提供一种在相似对象列表中遍历对象的标准化方法。在SQL Server数据库中的同义词是游标。

DECLARE tables CURSOR
FOR select TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
FOR READ ONLY
DECLARE @table varchar(40)
OPEN tables
FETCH tables INTO @table
WHILE (@@FETCH_STATUS = 0)
BEGIN
exec sp_help @table
FETCH tables INTO @table
END
CLOSE tables
DEALLOCATE tables

注:游标的清理代码:在CLOSE后紧跟DEALLOCATE,实际上可以只运行DEALLOCATE,并且游标也能自动关闭。但这不是最自然,也不是最常见的方法。大家可以理解为:CLOSE抵消OPEN,DEALLOCATE与DECLARE则相反,这样可以使代码保持对称并且合乎逻辑。

二、INTERSECTOR(交集)

这种模式是表示集合交集的一种模板。

1、推荐方法:

select c.companyname,o.orderid

FROM customer c INNER join orders o ON c.customerid = o.customerid

2、旧式语法(不推荐使用)

select c.companyname,o.orderid
FROM customer c ,orders o
where c.customerid = o.customerid

注:实现集合交集还有许多变种方法。但是惯例方法就是方法1,方法2在实现左(右)联接时,条件的表示及结果都可能出现问题,SQL SERVER的后续版本将会取消此种联接方式。

三、QUALIFIER(限定)

限定数据等价于筛选查询所返回的行数。

1、常用法:where子句限定

select city,count(*) AS NumberCity
FROM customers
where city like ’A%’
GROUP BY city

2、不自然的筛选:HAVING子句限定

select city,count(*) AS NumberCity
FROM customers
GROUP BY city
HAVING city like ’A%’

注:HAVING子句的目的是在结果集被检索出来后再筛选查询。实际上,SQL SERVER内在地转换HAVING子句为where子句(两种方法查询的执行计划是相同的),如果SQL SERVER不执行此优化,则针对包含大量数据行的表,因需要在筛选前从表中检索所有行,则性能方面可能会遭受重大损失。

(编辑:温州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读