强大的备份功能
在数据备份方面,SQL Server 2008提供了备份压缩功能。和使用数据压缩所不同的是,我强烈推荐大家使用这个备份压缩功能。节省存储数据的硬盘空间固然非常伟大,但是让单独备份的数据库文件体积更小则更美妙。你是否有过需要把一个大数据库文件从一个服务器拷贝到另一个服务器的经历?或许你现在正在进行一个备份数据库文件的复制,或者搭建一个测试环境,或者是在服务器挂了后进行数据恢复,这时候你或许在为通过网络拷贝一个500G大小的数据库文件而发愁。最简单的一个常识是,拷贝的文件体积越小,拷贝完成的速度就越快。在此之前,你或会通过将这个数据库文件压缩成zip文件,使其体积更小,更便于携带。而现在,通过备份压缩功能,你就可以节省备份数据库文件的体积。
要想使用备份压缩功能,你只需要简单的在BACKUP DATABASE语句后简单的加上一个WITH COMPRESSION选项即可,如下例所示:
TO DISK = 'D:\Backup\AdventureWorks.bak'
WITH COMPRESSION
如果你想知道这个备份压缩功能究竟可以为你节省多少空间,这儿有一个例子。在不使用备份压缩功能的情况下,我对一个965MB的数据库进行了备份,得到了一个大小为636MB的备份数据库文件。但是如果使用了压缩功能,相同的数据库所得到的备份文件大小只有147MB。不同数据库的压缩比率可能会有所不同,但是正如上面例子所示,你总可以获得比较大的压缩效果。
学会使用Merge语句
在SQL Server 2008中,有一个新的MERGE语句让我有一点点激动。SQL Server开发者在编写修改表的存储过程时,会非常喜欢这个新的T-SQL语法。使用“IF-THEN”来决定一个数据行是否需要被插入、更新或删除的时代已经过去了。MERGE让我们可以一次搞定所有的逻辑和修改。而且,你可以一次就能搞定整个数据集的对比,不用再逐行进行对比。以下是使用MERGE语句的一个例子:
USING (
SELECT customer_objid = address_label,
addressline1, addressline2, city, region, country, zip
code, is_deleted
FROM @addresses)
AS
source_addresses(address_label, addressline1,
addressline2, city, region, country, zipcode,
is_deleted)
ON
(
current_addresses.address_label = source_address
es.address_label
)
WHEN NOT MATCHED THEN
INSERT (address_label, addressline1, addressline2,
city, region, country, zipcode)
VALUES (source_addresses.address_label,
source_addresses.addressline1,
source_addresses.addressline2,
source_addresses.city, source_addresses.region,
source_addresses.country, source_addresses.zipcode)
WHEN MATCHED AND source_addresses.is_deleted
= 1
THEN DELETE
WHEN MATCHED THEN
UPDATE
SET address_label=source_addresses.address_label,
addressline1=source_addresses.addressline1,
addressline2=source_addresses.addressline2,
city=source_addresses.city, region=source_address
es.region, country=source_addresses.country,zip
code=source_addresses.zipcode
我们简单的对上述例子进行一下点评。USING部分定义了新数据,在这个例子中是一个表变量。ON部分定义了新数据和现有数据之间的联接。最后,它通过一系列的MATCHED语句来进行相应操作,其中包括WHEN NOT MATCHED的时候进行插入操作,WHEN MATCHED的时候执行更新操作,或WHEN MATCHED且符合一些其它条件的时候进行删除操作。这是一个真正让你省心省力的功能,其语法更干净,且符合我们习惯的思维逻辑。