Emerson回来之后,在过程中遇到的一些问题,再次做一些整理,包括本篇的Sql Server各版本之间的区别和另一篇数据库函数。
(博文内容来自网络)
数据类型
SQL Server 2008 数据类型 |
SQL Server 2005 数据类型 |
SQL Server 2000 数据类型 |
公共语言运行库用户定义类型 (UDT):8000 个字节或更少 |
UDT |
image |
UDT:大于 8000 个字节1 |
varbinary(max) |
image |
date 2, 3 |
nvarchar(10) |
nvarchar(10) |
datetime2 2, 3 |
nvarchar(27) |
nvarchar(27) |
datetimeoffset 2, 3 |
nvarchar(34) |
nvarchar(34) |
FILESTREAM 属性1, 4 |
varbinary(max) |
不支持 |
geography 和 geometry1, 3 |
varbinary(max) |
image |
hierarchyid 1, 5 |
varbinary(max) |
image |
nvarchar(max) |
nvarchar(max) |
ntext |
time 2, 3 |
nvarchar(16) |
nvarchar(16) |
varchar(max) |
varchar(max) |
text |
varbinary(max) |
varbinary(max) |
image |
xml |
xml |
ntext |
复合运算符
SQL2008现已提供可执行操作并将变量设置为结果的运算符(例如SET @x += 2)。
CONVERT 函数
SQL2008 CONVERT 函数现已增强,允许在二进制和字符十六进制值之间进行转换
日期和时间功能
SQL Server 2008 包含对 ISO 周-日期系统的支持
语法
DATEPART ( datepart , date ) |
参数
datepart
是将为其返回 integer 的 date(日期或时间值)的一部分。下表列出了所有有效的 datepart 参数。用户定义的变量等效项是无效的。
datepart |
缩写 |
year |
yy, yyyy |
quarter |
qq, q |
month |
mm, m |
dayofyear |
dy, y |
day |
dd, d |
week |
wk, ww |
weekday |
dw |
hour |
hh |
minute |
mi, n |
second |
ss, s |
millisecond |
ms |
microsecond |
mcs |
nanosecond |
ns |
TZoffset |
tz |
ISO_WEEK |
isowk, isoww |
date
是一个表达式,可以解析为 time、date、smalldatetime、datetime、datetime2 或 datetimeoffset 值。date 可以是表达式、列表达式、用户定义的变量或字符串文字。
返回类型
int
返回值
每个 datepart 及其缩写都返回相同的值。
执行
SELECT DATEPART(year,'2007-10-30 12:15:32.1234567 +05:10')
go
SELECT DATEPART(YYYY,'2007-10-30 12:15:32.1234567 +05:10')
go
SELECT DATEPART(YY,'2007-10-30 12:15:32.1234567 +05:10')
发现结果都是2007
time 数据类型的默认时-分-秒为 00:00:00。下面的语句具有 datepart 的时间部分参数、date 的日期参数,并返回 0, 0, 0。
SELECT DATEPART(hour, '2007-06-01')
,DATEPART(minute, '2007-06-01')
,DATEPART(second, '2007-06-01');
TOP 表达式
SQL Server 2000的TOP是个固定值,2000以后的改进了。 如
declare @n int
set @n = 10
select TOP(@n) * from humres
分页
SQL Server 2005以后才支持分页,使用ROW_NUMBER()函数
TRY ... CATCH
SQL Server 2000没有异常,T-SQL必须逐行检查错误代码, 2005以后增加了try catch功能
MAX类型
使用VARCHAR(MAX) NVARCHAR(MAX)类型代替TEXT NTEXT是不错的选择
CTE
先看下面一个嵌套的查询语句:
select * from humres h
where h.id in (
select h.id from humres h where h.objname like 'sysadmin%'
)
上面的查询语句使用了一个子查询。虽然这条SQL语句并不复杂,但如果嵌套的层次过多,会使SQL语句非常难以阅读和维护。因此,也可以使用表变量或者临时表的方式来解决这个问题(这里sql省略了)。这样做将使SQL语句更容易维护,但又会带来另一个问题,就是性能的损失。
在SQL Server 2005中提供了另外一种解决方案,这就是公用表表达式(CTE),使用CTE,可以使SQL语句的可维护性,同时,CTE要比表变量的效率高得多。具体sql如下:
with humres1 as (select h.id from humres h where h.objname like 'sysadmin%')
select * from humres h
where h.id in (select * from humres1)
CTE后面也可以跟其他的CTE,但只能使用一个with,多个CTE中间用逗号(,)分隔,如下面的SQL语句所示:
with humres1 as (select h.id from humres h where h.objname like 'sysadmin%'),
humres2 as (select h.id from humres h where h.objname like 'sysadmin1%')
sqlcmd
命令行,但是功能有限。适合机器跑不动SQL Server Management Studio的机器使用。
加密
SQL Server 2008加密备份的方式可以防止数据泄漏和被窜改。另外,备份的恢复可以限于特点的用户。
兼容性
sqlServer2005支持sqlServer2000,而SqlServer 2008终止对SQL 2000的支持, 对SQL 2000的主流支持将被终止。
数据压缩
通常,数据压缩总是和节约硬盘、更小的物理文件、备份次数的减少是联系在一起的。而对于SQL Server的数据压缩而言,主要的目的是实际的表的尺寸的减小。数据压缩的某些好处包括以下几点:
通过减少I/O和提高缓存命中率来提升查询性能。和其他特点是正交的,对数据和索引都可用,据微软所说,使用压缩时会轻微的增加CPU的使用,整个系统的性能会因为I/O的减少而得多提升。
操作界面
SQL Server 2005 引入了用于管理 SQL Server 的新工具。SQL Server Management Studio 取代了 SQL Server 企业管理器、SQL 查询分析器、MDX 示例应用程序和 Analysis Manager 的一些功能。SQL Server 2000 企业管理器和 SQL 查询分析器不能用于管理更新的版本。
数据分区
SQL Server 2005以前版本的一个问题是随着时间的推移数据库越来越大,备份需要的空间越来越多,如何处理数据库中的历史数据是很棘手的事情。2005后,可以根据字段值的范围将表和索引划分为多个分区从而可以轻松管理一个几个TB大小的数据库系统。无论数据如何增长,你都可以使用分区技术使得数据库大小保持相对稳定
可编程性
可编程性,有了CLR 集成,你可以轻松利用.NET语言的优势如其面向对象的封装、继承和多态特性,编写出那些需要对数据进行复杂数值计算或逻辑的代码,如字符串处理,数据加密算法,XML数据操作等等。由于CLR代码宿于SQL Server进程,你可以非常容易访问数据库中的数据。有了CLR,你不再局限于T-SQL,你现在立即拥有了.NET 框架类库提供的各种各样的类和例程,以及.NET语言提供的一致的编程模型,如错误处理。
全文搜索增强
全新设计的全文检索引擎提高了性能,除了性能,SQL Server 2005 中的全文索引的集成性也大大加强。在SQL Server 2000 中很难对全文检索进行备份。一旦有数据库恢复或移动,你得重新重建索引。Sql2005后,可以和数据库一起备份和恢复全文索引了
复制增强
SQL Server 2000 中,仅支持向其他数据库(如DB2或Oracle)发布数据,而在SQL Server 2005后,可将Oracle 数据库直接复制到SQL Server。
运行时添加CPU
这个功能SQL SERVER 2008可以在硬件升级时保持可用。