当前位置: 代码迷 >> SQL >> SQLServer2005学习札记
  详细解决方案

SQLServer2005学习札记

热度:123   发布时间:2016-05-05 15:13:10.0
SQLServer2005学习笔记

SQLServer新增了varchar(max)、nvarchar(max)与varbinary(max)三种数据类型,用于取代旧版本的text,ntext及image数据类型。

?

pivot和unpivot的使用方法。

?

exec sp_dbcmptlevel oa,90;

?

如果数据库是2000类型,必须要用上面的语句,把数据库的类型改成兼容类型。

?

PIVOT的用法:

首先创建测试表,然后插入测试数据


create table test(id int,name varchar(20),quarter int,profile int)
??????????????????????? insert into test values(1,'a',1,1000)
??????????????????????? insert into test values(1,'a',2,2000)
??????????????????????? insert into test values(1,'a',3,4000)
??????????????????????? insert into test values(1,'a',4,5000)
??????????????????????? insert into test values(2,'b',1,3000)
??????????????????????? insert into test values(2,'b',2,3500)
??????????????????????? insert into test values(2,'b',3,4200)
??????????????????????? insert into test values(2,'b',4,5500)
??????????????????????? select * from test
??????????????????????? id name quarter profile
??????????????????????? ----------- -------------- ----------- -----------
??????????????????????? 1 a 1 1000
??????????????????????? 1 a 2 2000
??????????????????????? 1 a 3 4000
??????????????????????? 1 a 4 5000
??????????????????????? 2 b 1 3000
??????????????????????? 2 b 2 3500
??????????????????????? 2 b 3 4200
??????????????????????? 2 b 4 5500
??????????????????????? (8 row(s) affected)
??????????????????????? 使用PIVOT将四个季度的利润转换成横向显示:
??????????????????????? select id,name,
??????????????????????? [1] as "一季度",
??????????????????????? [2] as "二季度",
??????????????????????? [3] as "三季度",
??????????????????????? [4] as "四季度"
??????????????????????? from
??????????????????????? test
??????????????????????? pivot
??????????????????????? (
??????????????????????? sum(profile)
??????????????????????? for quarter in
??????????????????????? ([1],[2],[3],[4])
??????????????????????? )
??????????????????????? as pvt
??????????????????????? id name 一季度 二季度 三季度 四季度
??????????????????????? -------- --------- ----------- -------- ------- -------
??????????????????????? 1 a 1000 2000 4000 5000
??????????????????????? 2 b 3000 3500 4200 5500
??????????????????????? (2 row(s) affected)
?

?

?


UNPIVOT的用法:

?

首先建立测试表,然后插入测试数据
??????????????????????? drop table test
??????????????????????? create table test(id int,name varchar(20), Q1 int, Q2 int, Q3 int, Q4 int)
??????????????????????? insert into test values(1,'a',1000,2000,4000,5000)
??????????????????????? insert into test values(2,'b',3000,3500,4200,5500)
??????????????????????? select * from test
??????????????????????? id name Q1 Q2 Q3 Q4
??????????????????????? -------- ------- --------- --------- -------- --------
??????????????????????? 1 a 1000 2000 4000 5000
??????????????????????? 2 b 3000 3500 4200 5500
??????????????????????? (2 row(s) affected)
??????????????????????? 使用UNPIVOT,将同一行中四个季度的列数据转换成四行数据:
??????????????????????? select id,name,quarter,profile
??????????????????????? from
??????????????????????? test
??????????????????????? unpivot
??????????????????????? (
??????????????????????? profile
??????????????????????? for quarter in
??????????????????????? ([Q1],[Q2],[Q3],[Q4])
??????????????????????? )
??????????????????????? as unpvt
??????????????????????? id name quarter profile
??????????????????????? ----------- ----------- ---------- -----------
??????????????????????? 1 a Q1 1000
??????????????????????? 1 a Q2 2000
??????????????????????? 1 a Q3 4000
??????????????????????? 1 a Q4 5000
??????????????????????? 2 b Q1 3000
??????????????????????? 2 b Q2 3500
??????????????????????? 2 b Q3 4200
??????????????????????? 2 b Q4 5500
??????????????????????? (8 row(s) affected)

?


?

SQL Server 2005的系统数据库tempdb大小比旧版SQLServer大,这是因为某些SQLServer 2005的新功能需要使用tempdb。比方说,SQLServer 2005改善空间的配置与算法、针对tempdb提供缓存(Cache)功能以减少tempdb的负担,使得针对tempdb中的表执行事务更新的速度有所提升,因为tempdb系统数据库所需要的大小比起旧版的SQLServer要大。tempdb系统数据库的大小是否足够,关系到SQLServer 2005的性能,建议您将tempdb设定成自动增长,而增长的方式可按照表4-1所列进行设置。

?

char: 如果定义char(5),插入'Hello,I am tntxia',数据库保存Hello,如果定义char(10),插入'Hello',数据库会保存成'Hello????? '
varchar: 可变型

varchar(max): 可以让可变型字符串达到最大

nchar Unicode类型的char, 可以避免迁移数据库时字符的出错

smalldatetime的精确度是分钟,所以注意要使用秒数的数据不能使用smalldatetime

?

使用Select ... into 表达式来添加数据记录的最大特色是:它会自动创建一个新表,然后把查询结果存入其中。

?

如:select *? into 陈仕贤做的报价单 from quote where man = '陈仕贤'

可以把陈仕贤做的报价单放在陈仕贤做的报价单这张表里面

?

每个页的大小是8K(或8194个字节,但实际8060个字节可以用),这意味着1MB数据库有128个页,每个页的前96个字节是页首,页首会存储一些系统信息,包括页的页码、页的类型、页中的可用空间及拥有此页的对象的对象ID

?

?扩展盘区(Extent)是SQLServer分配给表和索引的单位空间。扩展盘区由8个连续的页构成,大小是64KB,这意味着,SQL Server的数据库每1MB有16个扩展盘区。

?

SQLServer 2005的扩展盘区可分为下列两种类型:

?

统一扩展盘区和混合扩展盘区。

  相关解决方案