<audio id="audio" title="148 | SQL Server发展史" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/72/1c/7255c519683fe5c02b6163dd6455291c.mp3"></audio>

微软的SQL Server是整个数据库产业里面一个重要的产品。在2017年的时候，SQL Server超过了IBM的DB2成为仅次于Oracle的第二大数据库产品。

有关SQL Server的发展，一直有这样的一个传闻：微软从另外一个数据库厂商Sybase那儿买了一份源代码，然后微软就在这份源代码上改啊改。最后微软蒸蒸日上，Sybase却每况愈下。Sybase做了历史上最亏本的生意。

事实上真的是这样吗？当然不是。实际上微软SQL Server和Sybase之间的关系远比这个传闻复杂。今天我就来讲讲SQL Server的发展史。

1987年，微软和Sybase签署了合作伙伴协议。这个协议的主要内容是：微软和Sybase一起合作开发一款基于Sybase已经开发但还没发布的数据库产品。Sybase拥有这款产品在Unix相关平台上的发布权，而微软则拥有对OS/2以及任何微软开发的操作系统的发布权。

那个时候整个个人计算机平台上占统治地位的数据库叫dBase，是由Ashton-Tate公司开发的（这个公司后来倒闭了，关于它的故事在我们专栏的后面会讲）。当时为了能够让新开发的数据库系统可以吸引大量dBase的开发者，微软和Sybase决定跟Ashton-Tate合作，为SQL Server提供dBase的接口。

很不幸的是，1989年之于Ashton-Tate并不是个好年头。这一年它发布了dBase4。但是这个产品问题很多，Ashton-Tate从此陷入了泥潭，直到它被Borland收购。而微软和Sybase也跟Ashton-Tate结束了合作关系。但是微软和Sybase还是发布了SQL Server的1.0版，只是传说中的Ashton-Tate的接口被取消了。

这个1.0版的合作关系大致是这样的：Sybase负责开发所有的源代码，而微软负责测试，偶尔也打打酱油修点Bug。最初的时候，微软对整个源代码只有只读权限，并没有写的权限。可以说在这个合作关系里, Sybase主导了这整个项目的开发进展。

这种合作关系，到1992年才有所改变。因为Sybase忙于开发新版，微软拿到了Sybase 4.0的源代码，负责把这个代码移植到OS/2上。这个产品最后以SQL Server 4.2发布了。

OS/2这个操作系统是微软和IBM合作的，但是微软和IBM合作的时候心猿意马，于此同时微软自己在做Windows。而微软和Sybase之间的合作，以微软继续给老版本增加功能，而Sybase开发新的版本的方式展开。

随着时间的推移，对微软来说，Windows NT变得越来越重要。所以微软决定把在OS/2上的4.2版本，移植到Windows NT上。但是因为NT这个操作系统和OS/2很不一样，而微软内部对于如何移植4.2也有很不一样的观点。具体来说就是：到底是应该大量利用某个特定操作系统的特有的功能和特性，还是说数据库系统自己实现某些需要在操作系统层面来实现的功能？

无论是Sybase，还是现在数据库主流产品Oracle的做法，都是后者。因为它们都希望数据库可以运行在不同的操作系统上。所以，利用操作系统里面最基本的功能，其他的东西都在数据库内部实现是一个数据库厂商常用的策略。

但是微软的SQL Server组却决定偷个懒，让SQL Server充分利用Windows NT提供的新特性，这样一来，SQL Server的移植过程就简单很多。而且SQL Server在Windows NT上的运行效率也会高不少。但是同样的，SQL Server的代码也就变得不再是独立于操作系统的了，而是专门为Windows NT开发的。

因为这个本质观念上的不同，微软对于继续和Sybase合作的兴趣也变得小起来。1994年微软和Sybase“和平分手”了。分手之后，微软决定只在Windows NT上继续开发自己的SQL Server。而除了原来在Unix操作系统上独立发布数据库产品的权限外，Sybase也第一次可以自由在微软开发的任何操作系统上发布数据库产品。在当时看，这好像是个双赢的结局。

微软在接下来的18个月内，重写了大量的代码，并发布了SQL Server 6.0和6.5。这个时候，两个源代码看起来就很不一样了。

微软在数据库上开始大量投入，到处挖人。很多业界知名的人士，比如吉姆·格雷（Jim Gray）、菲尔·伯恩斯坦（Phil Bernstein）、大卫·坎贝尔（David Campbell）、彼得·斯皮罗（Peter Spiro）等后来大名鼎鼎的人物，都是在这个时候被微软挖进来的。

当时的微软可谓财大气粗，有些人被挖的时候，不愿意来西雅图，比尔·盖茨就专门为这些人在硅谷修个办公室。微软网罗了这些人才以后，有了充足的人才，就开始大刀阔斧地开始下一个版本的开发。

这个后来以SQL Server 7.0命名的版本，把整个数据库几乎每个模块，从存储引擎到数据处理引擎全部重写了。不但如此，微软觉得自己应该构建出完整的数据处理产品。SQL Server 7.0还增加了数据仓库的支持。这个支持来自于微软收购的一个以色列的创业公司Panorama。这个产品后来的查询语言叫做MDX，最后成为了数据仓库业界的标准语言。另外，7.0还增加了对ETL的支持。

SQL Server 7.0奠定了微软SQL Server的根基。

之后微软发布了SQL Server 2000，这个版本增加了在多台机器上部署SQL Server的能力，还增加了对数据挖掘和XML的支持。接下来，SQL Server 2005又增加了SQLCLR的支持。这个支持让C#和.NET成为SQL Server支持用户定义类型、用户定义函数等的基础，以及很多其他的新功能。

到这个时候，SQL Server已经把Sybase远远地甩在后面了。而微软的SQL部门可谓人才济济，无论是做学术的，还是做数据库开发的，微软都做了很多很有意思的尝试。Sybase却开始越来越举步维艰。

可微软后面的事情，却多少有点“大跃进”的味道了。比尔·盖茨提出了要构建新的文件系统WinFS。这个文件系统底层基于数据库，可以提供很先进的数据存储和查询能力。这个想法一出，业界一片哗然。微软投入了无数的人力、物力去做这个系统，最后却败得一塌糊涂。其实主要原因还是愿景超出了技术的能力，即使是微软也开发不出来。

很多人都觉得，微软之所以转向衰败，比尔·盖茨的WinFS需要负很大的责任。如果换成另外一个公司，浪费了如此多的人力、物力，能不能活下来就不知道了。更何况，微软还错过了很多其他比较好的机会。另外，SQL Server队伍里面大量人员卷入这个项目，对于SQL Server自身的发展也是一个束缚。

作为产品，SQL Server最近几年又活跃起来，只是和2000年前后的那种状态还是有所差别的，终究是不可同日而语的。而微软里面曾经在SQL Server核心工作的很多员工也早离开微软去了亚马逊、谷歌、Facebook等新兴公司。这让SQL Server的研发力量大打折扣。但是不管怎么样，比较SQL Server和Sybase的命运，SQL Server还是好太多了。


