在今天的文章里我想讨论下SQL Server里一个特别的T-SQL语言结构——自SQL Server 2005引入的PIVOT运算符.我经常引用这个与语言结构是SQL Server里最危险的一个——很快你就会知道为什么.在我们进入特定问题和陷阱前,首先我想给你下使用SQL Server里的PIVOT能实现什么的一个基本概述. 概述 SQL Server里PIVOT运算符背后的基本思想是在T-SQL查询期间,你可以旋转行为列.运算符本身是SQL Server 2005后引入的,主要用在基于建立在实…
原文:SQL server 2005 PIVOT运算符的使用 PIVOT,UNPIVOT运算符是SQL server 2005支持的新功能之一,主要用来实现行到列的转换.本文主要介绍PIVOT运算符的操作,以及如何实现动态PIVOT的行列转换. 关于UNPIVOT及SQL server 2000下的行列转换请参照本人的其它文章. 一.PIVOT的语法 SELECT [non-pivoted column], -- optional [additional non-pivoted columns]…
在今天的文章里,我想谈下SQL Server里非常有争议和复杂的话题:ORDER BY子句的歧义性. 视图与ORDER BY 我们用一个非常简单的SELECT语句开始. -- A very simple SELECT statement SELECT * FROM Person.Person ORDER BY LastName GO 从刚才列出的代码你可以看到,我们只想从Person.Person表以LastName列排序返回记录.因为我们想能尽可能简单的重用那个SQL语句,最后我们把它放到视图…
在今天的文章里,我想讨论下SQL Server里的INTERSECT设置操作.INTERSECT设置操作彼此交叉2个记录集,返回2个集里列值一样的记录.下图演示了这个概念. INTERSECT与INNER JOIN 你会发现,它和2个表间的INNER JOIN几乎一样.但今天我会介绍它们之间的一些重要区别.让我们从创建作为输入的2个简单表开始. -- Create the 1st table CREATE TABLE t1 ( Col1 INT, Col2 INT, Col3 INT ) GO…
在今天的文章里我想演示下SQL Server里在表上丢失索引如何引起死锁(deadlock)的.为了准备测试场景,下列代码会创建2个表,然后2个表都插入4条记录. -- Create a table without any indexes CREATE TABLE Table1 ( Column1 INT, Column2 INT ) GO -- Insert a few record , ) , ) , ) , ) GO -- Create a table without any indexe…
在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务?未必,因为通过SQL Server里所谓的Grouping Sets就可以.在这篇文章里我会给你概括介绍下Grouping Sets,使用它们可以实现哪类查询,什么是它们的性能优势. 使用Grouping Sets的聚合 假设你有个订单表,你想进行跨多个分组的T-SQL聚集查询.在Adventur…
http://database.51cto.com/art/201108/285250.htm SQL Server数据库中,PIVOT在帮助中这样描述滴:可以使用 PIVOT 和UNPIVOT 关系运算符将表值表达式更改为另一个表.PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合.UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值. 测试用的数据及表结构: CREATE TABLE Shopp…
在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL Sever里特定的死锁类型,还有你如何避免和解决它们. 死锁处理 死锁的好处是SQL Server自动检测并解决它们.为了解决死锁,SQL Server需要回滚2个事务中最便宜的那个.在SQL Server上下文中,最便宜的事务是写入事务日志更少字节的那个. SQL Server在后台进程中实现死锁…
在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题.在今天的文章里,我想从性能角度进一步谈下书签查找,还有它们如何拉低你整个SQL Server性能. 书签查找——反复循环 如果你的非聚集索引不是个覆盖非聚集索引,SQL Server的查询优化器会引入书签查找.对于从非聚集索引你返回的每一行,SQL Server需要在聚集索引里或堆表里进行额外的查找操作. 例如当你的的聚集索引包含3层,为了返回必要的信息,对于每一行,你需要3页额外的读取.因此,查询优化器再执…
在今天的文章里,我想谈下SQL Server里如何处理死锁.当2个查询彼此等待时会发生死锁,没有一个查询可以继续它们的操作.首先我想给你大致讲下SQL Server如何处理死锁.最后我会展示下SQL Sever里特定的死锁类型,还有你如何避免和解决它们. 死锁处理 死锁的好处是SQL Server自动检测并解决它们.为了解决死锁,SQL Server需要回滚2个事务中最便宜的那个.在SQL Server上下文中,最便宜的事务是写入事务日志更少字节的那个. SQL Server在后台进程中实现死锁…