新的数据类型
继SQL 增加了四种新的数据类型之后SQL 又提供了三种新的数据类型分别是bigintsql_variant和table
在数据量越来越大的今天用int(^ () 到 ^ ())来表示整数有时已经显得不太够用了FLOAT也不是很合适所以VB 和SQL 都有了新的整数类型这就是bigint它是bytes的整数类型范围是^ () 到^ ()
熟悉VBScript的人都知道VBS使用的是一种叫做variant的数据类型它可以存放任何数据类型数字字符对象等SQL 里面的sql_variant还没有那么强大的功能它不能存放blob的数据如textntext和image还有timestamp但是已经给编程带来了很大的方便了
SQL里面是没有数组类型的但是新的表格类型允许应用软件暂时存储那些一会儿会用到的结果它不可以做为表的一个列出现而只能在TSQL程序中使用作为自定义函数的返回值很好用的
Example:
DECLARE @TableVar TABLE
(Cola int PRIMARY KEY
Colb char())
INSERT INTO @TableVar VALUES ( abc)
INSERT INTO @TableVar VALUES ( def)
SELECT * FROM @TableVar
GO
要注意的是以前版本的ADO对这几种数据类型的支持都不完全要在程序中使用这两种数据请使用MDAC
SQL Server 和 XML
现在XML似乎很吃香各种东东都开始支持XML了善于跟风的MS自然是事事都想要带头的浏览器OfficeSQLMDAC都要和XML搀和一哈
去年MS就在MDAC还是里面提供了一个功能把一个结果集保存为XML在SQL 里面使用XML更加方便了SQL查询可以直接返回一个XML并且还可以通过XML来修改数据库中的数据哦
要返回XML非常的简单只需要在你的SQL 语句后面加一个FOR XML AUTO就可以了
Example:
SELECT TOP ID Filename Download_Time Introduce FROM download FOR XML AUTO
如果使用FOR XML RAW的话就会返回
如果用FOR XML AUTO ELEMENTS结果是
ayako_katagiriexe
T::
片桐彩子Winamp Skin
使用FOR XML EXPLICIT特别麻烦前面要定义一堆东西但是功能也很强大
我就不详细介绍了有兴趣的可以参见Online BookUsing EXPLICIT Mode
SELECT TOP as Tag Null as ParentID as [DownloadXML!!ID] Filename as
[DownloadXML!!Filename] FROM download FOR XML EXPLICIT
上面是如何返回XML数据下面来看一下如何把XML当表使用
OPENXML可以把XML的数据打开成为一个表
Example:
declare @l int
declare @txtXML varchar()
set @txtXML =
exec sp_xml_preparedocument @l OUTPUT @txtXML
SELECT * FROM OPENXML (@l /Root/download) WITH (ID intFilename
varchar())
EXEC sp_xml_removedocument @l
执行结果
ID Filename
ayako_katagiriexe
beautimid
beemp
behaviorjs
cactivexzip
chatsrvrexe
chatterexe
chinazip
ciyungb
ci_shanxigb
( row(s) affected)
这些功能意味着我们可以使用SQL 来生成一个XML并且通过XML的得到客户端的返回值(不一定要通过ASP之类的工具哦可以通过URL来访问SQL 返回的XML的不过这个功能我还没有弄太明白所以先不介绍了)
联合SQL 服务器(Federated SQL Server Servers)
可能大家都听说过集群服务器Clustered Server但是在SQL 里面我却惊奇的发现集群服务器不见了!取而代之的是一个叫联合服务器的东东
现在就让我们来看看它们之间有什么区别吧
SQL 的数据库能够被分散在一组独立的数据库服务器上以支持大规模的Web站点的访问需求和企业级的数据处理系统面对日益增长的需求只需要简单的添加一个节点服务器就可以了
——我怎么看不出来和集群服务器有什么区别嘛?
——上课的时候不要发出这种声音!急什么下面自然会讲到的再乱讲话就罚站了哦
Windows 的COM+组件就是被设计来用于在集群的Windows 服务器上实现商业逻辑层的每个服务器上都有一套同样的COM+组件WIndows 自己来平衡各个服务器之间的负载使用Cluster Administrator可以很方便的配置集群服务器
但是SQL 并不支持这样的集群SQL 支持可更新的分布式视图(distributed partitioned views )用它来水平的将数据分割在一组服务器上这使得用户可以把一个数据库服务器添加到一组数据库服务器中这些数据库相互合作以提供和集群数据库服务器相同的性能标准虽然它们合作管理这些数据但是它们之间是独立运作的每个服务器有独立的管理界面(当然你可以使用Enterprise Manager来管理一组服务器但总是作为一个Group中多个Server来管理的并不能把它们当作是一个Server)也有各自的运作规则可以有其他的数据和进程只是在联合起来处理一个工作的时候才联合在一起
SQL 现在在多CPU的系统上可以有非常优异的性能(可以有个或者更多的CPU)但是使用联合服务器你几乎可以处理无限的负载现在 最高的tpcc纪录就是台CPU的联合服务器完成的(月日的测试结果到现在仍然是最高的)
数据库服务器和商业逻辑服务器不一样运行商业逻辑的时候每个服务器都可以完成相同的工作即使一台服务器down了也不会对系统有什么影响而数据库就不一样你必须把数据分散在不同的服务器上否则对性能就没有什么提高了而在这样的情况下如果数据库服务器不能用于处理独自的事务那么就显得有些浪费
OK课间休息min下面我们讲重要的话题如何使用联合服务器
建立Linked Server
SQL 就有了的东东打开你的Enterprise ManagerSecurity|Linked Servers右键New Linked ServerServer Type选SQL Server然后填上用户名口令什么的
在每个服务器上建立表
On Server:
CREATE TABLE Table__To_
(ID INT PRIMARY KEY
CHECK (ID BETWEEN AND )
other fields
)
On Server:
CREATE TABLE Table__To_
(ID INT PRIMARY KEY
CHECK (ID BETWEEN AND )
other fields
)
On Server:
CREATE TABLE Table__To
(ID INT PRIMARY KEY
CHECK (ID > )
other fields
)
在每个服务器上建立视图
CREATE VIEW Partitioned_Views AS
SELECT * FROM MyDatabasedboTable__To_
UNION ALL