小弟原来使用sql2000(sp3)企业版做数据库服务器,但是现在听说sql2005已经很稳定和使用非常普遍了,但是sql2005与sql2000的区别小弟还不清楚,有以下问题想咨询一下大家:1.现在用sql2005做数据服务器的都是什么配置,比如sql2005企业版(sp2)之类的
2.sql2005的性能(查询和执行速度之类的)与sql2000的差别
3.如果从sql2000升级到sql2005代码有什么改变?
4.sql2005和sql2000的价格差?
5.sql2005和sql2000的硬件要求区别?针对以上情况请大家指点,非常感谢!

解决方案 »

  1.   

    1.windows 2003 sp1 企业版 + sql2005企业版+(sp1)sp2
    2.不清楚.
    3.
    升级到SQL Server 2005的常见问题解答 
    http://database.ctocio.com.cn/tips/314/7573314.shtmlsqlserver2000升级到2005总结www.itpub.net (zhouwf0726)经历了很长时间的 sqlserver2000升级到2005 的测试,并开始了部分升级工作(10几台server)。现在一些总结共享下:升级前:(Pre-Update) 
    1 升级版本检查 
     升级前的版本 支持的升级路径 
     SQL Server 2000 Enterprise Edition SP3 或更高版本1 SQL Server 2005 Enterprise Edition 
     SQL Server 2000 Standard Edition SP3 或更高版本1 SQL Server 2005 Enterprise Edition 
     SQL Server 2005 Developer Edition 
     SQL Server 2005 Standard Edition 
    2 安全注意事项 
     2.1增强物理安全性 将服务器置于专门的房间,未经授权的人员不得入内。 
     将数据库的宿主计算机置于受物理保护的场所,最好是上锁的机房,房中配备水灾检测和火灾检测监视系统或灭火系统。 
     将数据库安装在公司 Intranet 的安全区域中,任何时候都不要直接连接到 Internet。 
     定期备份所有数据,并将副本存储在远离工作现场的安全位置。 
     2.2 使用防火墙 在服务器和 Internet 之间放置防火墙。 
     将网络分成若干安全区域,区域之间用防火墙分隔。先阻塞所有通信流量,然后有选择地只接受所需的通信。 
     在多层环境中,使用多个防火墙创建屏蔽子网。 
     如果在 Windows 域内部安装服务器,请将内部防火墙配置为允许 Windows 身份验证。 
     在所有版本的 Windows 都是 Windows XP、Windows Server 2003 或更高版本的 Windows 域中,禁用 NTLM 身份验证。 . 
     如果应用程序使用分布式事务处理,可能必须要将防火墙配置为允许 Microsoft 分布式事务处理协调器 (MS DTC) 在不同的 MS DTC 实例之间以及在 MS DTC 和资源管理器(如 SQL Server)之间进行通信。 
     2.3 隔离服务 请尽可能不要在域控制器中安装 SQL Server。 
     在不同的 Windows 帐户下运行各自的 SQL Server 服务。 
     在多层环境中,在不同的计算机上运行 Web 逻辑和业务逻辑。 
     2.4 创建具有最低特权的服务帐户 
     2.5 禁用 NetBIOS 和服务器消息块 
    3 硬件和软件要求 
     3.1 硬件要求 监视器:SQL Server 图形工具需要 VGA 或更高分辨率:分辨率至少为 1,024x768 像素 
     定点设备:需要 Microsoft 鼠标或兼容定点设备 
     CD 或 DVD 驱动器:通过 CD 或 DVD 媒体进行安装时需要相应的 CD 或 DVD 驱动器 
     群集硬件要求:在 32 位和 64 位平台上,支持 8 节点群集安装(即,Microsoft Windows Server 2003 支持的最大节点数量)。 
     处理器类型:Pentium III 兼容处理器或更高速度的处理器 
     "处理器速度:最低要求:600 MHz
    推荐使用:1 GHz 或更高" 
     磁盘空间:系统最大磁盘空间 
     "内存:最低要求:512 MB
    推荐使用:1 GB 或更大
    最大:操作系统最大内存" 
     3.2 软件要求 网络软件要求:64 位版本的 SQL Server 2005 的网络软件要求与 32 位版本的要求相同。Windows Server 2003、Windows XP 和 Windows 2000 都具有内置网络软件。 
     Internet 软件:所有 SQL Server 2005 的安装都需要 Microsoft Internet Explorer 6.0 SP1 或更高版本,因为 Microsoft 管理控制台 (MMC) 和 HTML 帮助需要它。只需 Internet Explorer 的最小安装即可满足要求,并且不要求 Internet Explorer 是默认浏览器 
     Internet 信息服务 (IIS):安装 Microsoft SQL Server 2005 Reporting Services (SSRS) 需要 IIS 5.0 或更高版本 
     ASP.NET 2.0:Reporting Services 需要 ASP.NET 2.0。安装 Reporting Services 时,如果尚未启用 ASP.NET,则 SQL Server 安装程序将启用它。 
    4 将现有的 SQL Server 系统数据库(master、model、msdb 和 tempdb)配置为自动增长,并确保它们具有足够的硬盘空间 
    5 将 SQL Server 2000 数据库引擎实例升级到 SQL Server 2005 时,将保留 max worker threads 的配置值。但是,建议在升级前将 max worker threads 值更改为 0,以允许数据库引擎计算最佳线程数(instance->right manu->prcessor lab) 
    6 确保所有数据库服务器的 master 数据库中都有登录信息。这对还原数据库很重要,因为 master 数据库中有系统登录信息 
    7 禁用所有启动存储过程,因为升级过程在升级 SQL Server 实例时将停止然后再启动服务。在启动时处理的存储过程可能会阻塞升级过程 
    8 停止复制并确保复制日志是空的 
    9 退出所有应用程序,包括所有依赖 SQL Server 的服务。如果有本地应用程序连接到正在升级的实例,则升级可能会失败。 
    10 备份要升级实例中的所有 SQL Server 数据库文件,以便可以完全还原这些文件。 
    11 制定出数据库回滚计划 
    12 删除事务复制相关的元数据表:Msrpl_commands and Msrpl_transactions 合并复制要删除:Msmerge_contents and Msmerge_genhistory 
    13 为升级创建复制脚本,并需要进行相关校验和整理,以便进行重新创建复制关系。 
    14 确保所有数据库都是可读写的,要是只读数据库可先设置为可读写模式,待升级完成后再改为只读模式。 
    15 使用升级顾问来准备升级,并按升级顾问的分析结果进行相关升级的工作。 
    执行升级:(Update Execution) 
    1 断开用户连接 
    2 停止复制 
    3 禁用所有启动存储过程 
    4 确定升级的实例、数据库 
    5 针对每个组件选择升级和迁移工具 
    6 通过Setup日志监视升级进展和过程 
    7 是否完成配置复制脚本 
    8 是否完成作业脚本复制 
    9 是否完成维护任务脚本配置 
    10 是否完成对DTS包的迁移 
    升级后:(Post-Update) 
    1 参照升级顾问(Upgrade Advisor)报告完成续操作 
    2 更新表的统计信息(Update Statistic) 
    3 是否需要进行全文索引填充(Full-Text Population)操作 
    4 是否需要改变数据库的隔离级别 
    5 是否需要重新配置日志的传送 
    6 验证代理jobs 和维护任务 
    7 验证复制过程的正确性 
    8 连接性测试 
     注册服务器 
     查看所有数据库的表、视图 
     连接客户端程序测试(可能需要修改连接字符串) 
    9 安全性检测 
     服务帐户设置 
     SQL Server 配置 
     验证服务帐户的安全性 
     检验身份验证模式 
     是否使用强密码 
    10 T-SQL 查询检查 
     存储过程(不会自动更新) 
     不支持UPDATETEXT等 
     新的关键字(PIVOT,UNPIVOT,REVERT,TABLESAMPLE等) 群集升级和大内存使用
    sql server 2005 群集升级步骤 
    步骤 说 明
    1 停止复制
    2 将所有数据库的数据文件和日志文件改成自增长的方式
    3 选中所有数据库的自动更新统计信息选项
    4 统计并记录现有群集数据库的各个服务的启动账号,同时在域管理器新建管理组(sqlvs group)供升级使用
    5 在所有群集节点上安装DotNet2.0 组件
    6 在群集管理器中将所有组的控制权移动到同一节点上,将Sql Server 2005 安装文件拷贝到该群集节点或将安装光盘放入该节点的光驱
    7 点击Setup.exe文件开始安装
    8 安装过程中请注意: 1. 群集安装项的选择;2. 各个服务的启动账号的配置
    9 安装完成后,检查数据库的工作状态,如无异常,请将数据库的兼容级别由原来的80 改成90,以便更好使用sql server 2005 新的功能
    10 如有需要,请继续在其它群集节点上安装Sql Server 2005 客户端工具
    11 检查复制状态,如有异常,请参考注意事项5,6,7进行相关的修改。
     
    为sql server 2005群集启用AWE(使用大内存) 
    步骤 说 明
    1 确保操作系统支持大内存要求,即:在系统启动参数增加 /PAE 参数。(所有群集节点)
    2 启用“锁定内存中的页”选项(所有群集节点)
     1. 在“开始”菜单上,单击“运行”。在“打开”框中,键入 gpedit.msc。
     将打开“组策略”对话框。
     2. 在“组策略”控制台上,展开“计算机配置”,再展开“Windows 设置”。
     3. 展开“安全设置”,再展开“本地策略”。
     4. 选择“用户权利指派”文件夹。
     细节窗格中随即显示出策略。
     5. 在该窗格中,双击“锁定内存中的页”。
     6. 在“本地安全策略设置”对话框中,单击“添加”按钮。
     7. 在“选择用户或组”对话框中,添加有权运行 sqlservr.exe 的帐户。
    3 激活 AWE
     sp_configure 'show advanced options', 1
     RECONFIGURE
     GO
     sp_configure 'awe enabled', 1
     RECONFIGURE
     GO
    4 配置内存:
     内存配置说明:SQL Server 2005 在任何 Windows Server 2003 操作系统版本上运行时,都会动态地分配 AWE 映射内存。换言之,缓冲池可以动态管理 AWE 映射内存(在 min server memory 和 max server memory 选项的约束内),以按照总体系统要求平衡 SQL Server 内存的使用
     sp_configure 'min server memory', 1024
     RECONFIGURE
     GO
     sp_configure 'max server memory', 6144
     RECONFIGURE
     GO
     群集要求:如果使用的是 SQL Server 2005 故障转移群集和 AWE 内存,则必须确保所有实例的 max server memory 设置的总和小于故障转移群集中任一服务器上可用的最小物理内存。如果故障转移节点的物理内存比原节点上的内存小,则 SQL Server 2005 实例可能无法启动,或者可能在内存比在原节点上的内存小的情况下启动注意事项
    1 升级远程分发服务器db-dist后,要重新更新admininstrative link password,且发布服务器上需重新配置distributor 的administrative link password Microsoft SQL Server Management Studio->ServerName->Replication->right click -> distributor properties->Publishers->administrative link password->update password->click ok or click apply
    2 升级后,需要检查sql 服务的启动帐号是否为.\administrator start manu->all program->Microsoft sql server 2005 ->configuration tools->sql server configuration manager
    3 升级群集时,一定要保证两个节点安装好.net 2.0 
    4 升级完成后,要将各数据库的兼容级别由原来的80 改成 90 Microsoft SQL Server Management Studio->ServerName->Database->database name ,right manu->properties->options->Campatiblity level->downframe list,select: sql sever 2005 (90)-> Click buton ok
    5 如果要升级的服务器的 Sqlserver服务 的两个参数(@@servername 和 serverproperty('servername'))不一致时,可能会在升级过程中的出现错误 Invalid column 'Publisher_Type'. 原因分析:表msdb.dbo.MSDistPublishers 缺少字段Publisher_Type, 该表2000版本中无此列,而2005的版本增加了该列。在升级时更新系统存储过程信息时会使用到该表的列。因而会出错(主要针对复制数据库)。具体该表为何没有被升级,原因不详,待查。
     解决方案:
     1. 更新表msdb.dbo.MSDistPublishers,增加字段Publisher_Type,表结构详见帮助。
     2. 重新更新Local 服务器名称 a. Exec sp_dropserver @server='now servername' b. Exec sp_addserver @server='new servername',@local='local' c. 重新启动 发布服务器数据库服务
     3. 重新启动 分发服务器的代理服务。
    6 配置log shipping时,如果@@servername 和 serverproperty('servername') 值不同,请使用 sp_dropserver sp_addserver 进行修改,再进行配置log shipping, 配置完成后再把servername 恢复到以前的状态,此时log shipping 依然能正常工作。 更改servername 后,一定要重新启动sql server service.才能生效。
    7 如果要升级的服务器的 Sqlserver服务 的两个参数(@@servername 和 serverproperty('servername'))不一致时,升级后群集不能新建发布,而原来的复制关系工作正常。 解决方案:
     1.修改要新建发布的数据库的系统表dbo.sysreplservers 的srvname 列值,使其与@@servername 值一致, 修改前备份,修改后重新服务。
     2. 在新建发布时在Snapshot Agent Security界面时,注意
     A. 选择Run under the following Windows account 
     请输入: db-dist-t5\administrator , password, Confirm Password
     B. 在配置Connect to the Publisher选项 请选择Using the following SQL Server login
     再输入sa 用户 及其密码。
     3. 在新建订阅时,在Distributor Agent Security 界面,配置同2步。
     4.如果以上步骤不成功,请执行以下步骤后在重新建立发布和订阅:
     sp_configure 'remote proc trans',0 
     reconfigure with override升级后CPU利用率明显上涨,各个server的cpu利用率都有一倍多的增长,如从15%左右升级到30-40%,这对于有严格loadtime要求的系统是不允许的。目前正在着手解决。
    据微软技术支持讲:2005对邦定变量的要求比2000高很多,对于程序中有in list的查询应该尝试用临时表或者表变量等手段使之使用邦定变量。结果待续
      

  2.   

    一、数据库设计方面
    1、字段类型。
    SQL Server 2005引入了一系列 新的被称为MAX的数据类型。这是VARCHAR,NVARCHAR和VARBINARY类型的扩展,这几种类型 以前被限制在8000字节以下。MAX可以容纳高达2GB的数据,与TEXT和IMAGE一样。
    可以使用字符串函数对CLOB类型进行操作。但是这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?是否碎片会引发效率问题?这都是需要进一步探讨的东西。
    数据类型
    Sql server2000 Sql server2005
    text 最大2GB varchar(max) 最大2GB(相当于oracle中的CLOB类型)
    ntext 最大2GB nvarchar(max) 最大2GB
    image 最大2GB varbinary(max) 最大2GB(代替image也让SQL Server的字段类型更加简洁统一)
    无 XML XML 数据被作为二进制大型对象 (BLOB) 存储于内部,可有效地进行重新分析和压缩
    其它数据类型保持不变。
    2、外键的级联更能扩展
    新版本中外键级联加入了SET NULL 和 SET DEFAULT 属性,能够提供能好的级联设置。(有点像oracle了)语法如下(引用sql server 2005 help来说明):
    CREATE TABLE 和 ALTER TABLE 语句的 REFERENCES 子句支持 ON DELETE 和 ON UPDATE 子句:
    &S226; [ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
    &S226; [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
    如果没有指定 ON DELETE 或 ON UPDATE,则默认为 NO ACTION。
    NO ACTION
    指定如果试图删除/修改某一行,而该行的键被其他表的现有行中的外键所引用,则产生错误并回滚 DELETE/UPDATE语句。
    CASCADE、SET NULL 和 SET DEFAULT
    允许通过删除或更新键值来影响指定具有外键关系的表,这些外键关系可追溯到在其中进行修改的表。如果为目标表也定义了级联引用操作,那么指定的级联操作也将应用于删除或更新的那些行。不能为具有 timestamp 列的外键或主键指定 CASCADE。
    ON DELETE CASCADE
    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则也将删除所有包含那些外键的行。
    ON UPDATE CASCADE
    指定如果试图更新某一行中的键值,而该行的键值被其他表的现有行中的外键所引用,则组成外键的所有值也将更新到为该键指定的新值。 (如果 timestamp 列是外键或被引用键的一部分,则不能指定 CASCADE。 )
    ON DELETE SET NULL
    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
    ON DELETE SET NULL
    指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为 NULL。目标表的所有外键列必须可为空值,此约束才可执行。
    ON DELETE SET DEFAULT
    指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
    ON UPDATE SET DEFAULT
    指定如果试图更新某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具 有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON UPDATE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
    3、索引附加字段
    即在索引中存储一些常用字段以提高查询速度,这是一个不错的新特性。虽然索引的附加字段没有索引键值效率高,但是相对映射到数据表中效率还是提高了很多。在实验环境中会比映射到表中提高30%左右的效率。例:
    CREATE INDEX ix_CustomerPostalcode 
    On Sales.Customer(PostalCode)
    INCLUDE (AddressLine1,AddressLine2,City)
    索引会提高查询(select)语句的性能,但建有大量索引会影响 INSERT、UPDATE 和 DELETE 语句的性能,因为在表中的数据更改时,所有索引都须进行适当的调整。
    4、计算字段的持久化
    原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
    使用 ORDER 排序和虚拟字段 虚拟字段完成的是类似 自增长 ID 的任务 
    select identity(int,1,1) ID ,hymc into #temp 
    from hybm 
    order by hymc 
    (注: 在ORACLE中,语句: select rownum from USERTABLE order by USERNAME; 得到的rownum还是没有排过序时的ROWNUM,根本不是已经排过序的ROWNUM。也就是说,有没有ORDER BY一个样。)
    5、分区表
    分区表是个亮点!从分区表也能看出微软要做大作强SQL Server的信心。资料很多,这里不详细说。但是重点了解的是:现在的SQL Server2005的表,都是默认为分区表的。因为它要支持滑动窗口的这个特性。这种特性对历史数据和实时数据的处理是很有帮助的。但是需要注意的一 点,也是我使用过程中发现的一个问题。在建立function->schema->table后,如果在现有的分区表上建立没有显式声明的聚 集索引时,分区表会自动变为非分区表。这一点很让我纳闷。如果你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非 分区表。不知道这算不算一个bug。大家也可以试试。
    分区表效率问题肯定是大家关心的问题。在我的试验中,如果按照分区字段进行的查询(过滤)效率会高于未分区表的相同语句。但是如果按照非分区字段进行查 询,效率会低于未分区表的相同语句。但是随着数据量的增大,这种成本差距会逐渐减小,趋于相等。(500万数量级只相差10%左右)
    6、CLR类型
    微软对CLR作了大篇幅的宣传,这是因为数据库产品终于融入.net体系中。最开始我们也是狂喜,感觉对象数据库的一些概念可以实现了。但是作了些试验, 发现使用CLR的存储过程或函数在达到一定的阀值的时候,系统性能会呈指数级下滑!这是非常危险的!只使用几个可能没有问题,当一旦大规模使用会造成严重 的系统性能问题!
    其实可以做一下类比,Oracle等数据库产品老早就支持了java编程,而且提供了java池参数作为用户配置接口。但是现在有哪些系统大批使用了java存储过程?!连Oracle自己的应用都不用为什么?!还不是性能有问题!否则面向对象的数据库早就实现了!
    建议使用CLR的地方一般是和应用的复杂程度或操作系统环境有很高的耦合度的场景。如你想构建复杂的算法,并且用到了大量的指针和高级数据模型。或者是要和操作系统进行Socket通讯的场景。否则建议慎重!
    7、索引视图
    索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
    8、语句和事务快照
    语句级快照和事务级快照终于为SQL Server的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的!
    9、数据库快照
    原理很简单,对要求长时间计算某一时间点的报表生成和防用户操作错误很有帮助。但是比起Oracle10g的闪回技术还是细粒度不够。可惜!
    例子:
    CREATE DATABASE demo2
    GO
    USE demo2
    ALTER DATABASE demo2 SET allow_snapshot_isolation ON --启动快照功能
    CREATE TABLE test
    (
    tid INT NOT NULL primary key,
    tname VARCHAR(50) NOT NULL
    )
    INSERT INTO test VALUES(1,'version1')
    INSERT INTO test VALUES(2,'version2')--连接一USE demo2
    BEGIN TRAN
    UPDATE test SET tname='version3' WHERE tid=2
    SELECT * FROM test--连接二
    USE demo2
    SET transaction isolation level snapshot
    SELECT * FROM test10、Mirror
    Mirror可以算是SQL Server的Data guard了。具说它切换速度可以达到秒级,这个功能能否被用户认可还有待时间的考验. 这个操作起来比较简单不在详细介绍。二、开发方面
    参考页面:http://www.microsoft.com/china/msdn...e.mspx?mfr=true
    1、Ranking函数集
    其中最有名的应该是row_number了。这个终于解决了用临时表生成序列号的历史,而且SQL Server2005的row_number比Oracle的更先进。因为它把Order by集成到了一起,不用像Oracle那样还要用子查询进行封装。但是大家注意一点。如下面的例子:
    USE demo
    GO
    CREATE TABLE rankorder
    (
    orderid INT,
    qty INT
    )
    GO
    INSERT rankorder VALUES(30001,10)
    INSERT rankorder VALUES(10001,10)
    INSERT rankorder VALUES(10006,10)
    INSERT rankorder VALUES(40005,10)
    INSERT rankorder VALUES(30003,15)
    INSERT rankorder VALUES(30004,20)
    INSERT rankorder VALUES(20002,20)
    INSERT rankorder VALUES(20001,20)
    INSERT rankorder VALUES(10005,30)
    INSERT rankorder VALUES(30007,30)
    INSERT rankorder VALUES(40001,40)
    GO
    SELECT orderid,qty,
    ROW_NUMBER() OVER(ORDER BY qty) AS rownumber,
    RANK() OVER(ORDER BY qty) AS rank,
    DENSE_RANK() OVER(ORDER BY qty) AS denserank
    FROM rankorder
    ORDER BY qty
    还有一点要说明:
    select ROW_NUMBER() OVER (order by aa)
    from tbl
    order by bb
    会先执行aa的排序,然后再进行bb的排序。
    可能有的朋友会抱怨集成的order by,其实如果使用ranking函数,Order by是少不了的。如果担心Order by会影响效率,可以为order by的字段建立聚集索引,查询计划会忽略order by 操作(因为本来就是排序的嘛)。
      

  3.   

    2、top
    可以指定一个数字表达式,以返回要通过查询影响的行数或百分比,还可以根据情况使用变量或子查询。可以在DELETE、UPDATE和INSERT查询中使用TOP选项。可以动态传入参数,省却了动态SQL的拼写。
    例:
    --声明个变量
    DECLARE @a INT
    DECLARE @b INT
    DECLARE @c INT--赋值
    SET @a = 10
    SET @b = 5
    SELECT @c = @a/@b--使用计算表达式
    SELECT TOP(@c) * FROM toptest
    --使用SELECT语句作为条件
    SELECT TOP(SELECT COUNT(*) FROM toptest2) * 
    FROM toptest--指出top
    DELETE TOP(2) toptest where column1>'t6'--更新top
    UPDATE TOP(2) toptest SET column1 = 'hi' where column1<='t2'3、Apply
    对递归类的树遍历很有帮助。
    CROSS APPLY : 得到和FUNCTION 结果相匹配的记录
    OUTER APPLY: All rows , regardless of matching function results
    一个有代表性的例子:
    USE demo
    GO
    CREATE TABLE Arrays
    (
    aid INT NOT NULL IDENTITY PRIMARY KEY,
    array VARCHAR(7999) NOT NULL
    )
    GO
    INSERT INTO Arrays VALUES('')
    INSERT INTO Arrays VALUES('10')
    INSERT INTO Arrays VALUES('20,40,30')
    INSERT INTO Arrays VALUES('-1,-3,-5')
    GO
    CREATE FUNCTION function1(@arr AS VARCHAR(7999))
    RETURNS @t TABLE(pos INT NOT NULL, value INT NOT NULL)
    AS
    BEGIN
    DECLARE @end AS INT, @start AS INT, @pos AS INT
    SELECT @arr = @arr + ',', @pos = 1,
    @start = 1, @end = CHARINDEX(',', @arr, @start)
    WHILE @end > 1
    BEGIN
    INSERT INTO @t VALUES(@pos, SUBSTRING(@arr, @start, @end - @start))
    SELECT @pos = @pos + 1,
    @start = @end + 1, @end = CHARINDEX(',', @arr, @start)
    END
    RETURN
    END--测试
    SELECT * FROM function1('200,400,300')
    GOSELECT A.aid, F.*
    FROM Arrays AS A
    CROSS APPLY function1(array) AS F
    GO
    SELECT A.aid, F.*
    FROM Arrays AS A
    OUTER APPLY function1(array) AS F
    GO
    查询结果:
    4、CTE(Common Table Expression 通用表达式)
    它是一个可以由定义语句引用的临时表命名的结果集,要用到WITH 关键字。例:
    WITH SalesCTE(ProductID,SalesOrderID)
    AS
    (SELECT ProductID,COUNT(SalesOrderid)
    FROM Sales.SalesOrderDetail GROUP BY ProductID)
    SELECT * FROM SalesCTE
    5、try/catch
    先说明一下事务相关语法:
    BEGIN TRAN[SACTION] [transaction_name]
    COMMIT [TRAN[SACTION]] [transaction_name]
    ROLLBACK [TRAN[SACTION] [transaction_name]
    SAVE TRAN[SACTION] [savepoint_name]
    上面这几很简单不解释了,下面看 SET XACT_ABORT ON/OFF,当 SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。为 OFF 时,只回滚产生错误的 Transact-SQL 语句,而事务将继续进行处理。所以在sql server 2k里使用事务就必须SET XACT_ABORT ON或者设置保存点。有了try/catch sql server2005 就不一样了!! 演示代码如下表。USE demo
    GO
    CREATE TABLE student --创建工作表
    ( stuid INT NOT NULL PRIMARY KEY,
    stuname VARCHAR(50) )
    CREATE TABLE score
    ( stuid INT NOT NULL REFERENCES student(stuid),
    score INT )
    GO
    INSERT INTO student VALUES (101,'zhangsan')
    INSERT INTO student VALUES (102,'wangwu')
    INSERT INTO student VALUES (103,'lishi')
    INSERT INTO student VALUES (104,'maliu')
    2K事务的打操作 2005 使用TRY...CATCH构造扩充了错误处理能力
    --调用一个运行时错误
    SET XACT_ABORT ON(若为OFF 事务不会回滚)
    BEGIN TRAN
    INSERT INTO score VALUES (101,90)
    INSERT INTO score VALUES (102,78)
    INSERT INTO score VALUES (107,76) /*外键错误*/
    INSERT INTO score VALUES (103,81)
    INSERT INTO score VALUES (104,65)
    COMMIT TRAN
    GO
    SET XACT_ABORT OFF
    BEGIN TRY
    BEGIN TRAN
    INSERT INTO score VALUES (101,90)
    INSERT INTO score VALUES (102,78)
    INSERT INTO score VALUES (107,76) /*外键错误*/
    INSERT INTO score VALUES (103,81)
    INSERT INTO score VALUES (104,65)
    COMMIT TRAN
    PRINT '事务提交'
    END TRY
    BEGIN CATCH
    ROLLBACK
    PRINT '事务回滚'
    SELECT ERROR_NUMBER() AS ErrorNumber,
    ERROR_SEVERITY() AS ErrorSeverity,
    ERROR_STATE() as ErrorState,
    ERROR_MESSAGE() as ErrorMessage;
    END CATCH
    GO6、pivot/unpivot
    实现行列互转。2K 中这个功能用case实现,不过好像没有case 直观。而且默认的第三字段(还可能更多)作为group by字段很容易造成新手的错误。(有图我就不说了) 
    7、OUTPUT 关键字
    在下面的例子中只看蓝色的部分就是正常的insert into … values 语句,通过output 可以将中间值输出 到临时表,也就是不能过触发器也可以实现对中间数据的处理。例:
    DECLARE @InsertDetails TABLE (ProductID int, Insertedby sysname)
    INSERT INTO Stock.ProductList
    OUTPUT inserted.ProductID, suser_name() INTO @InsertDetails
    VALUES (‘Racing Bike’,412.99)MSSQL Server 2000系统数据类型:
    (来源于SQL查询分析器)
    1bigint 从 -2^63 到 2^63-1 之间的 integer (整数)数据
    2binary 定长的binary数据,最长为8,000字节
    3bit integer数据,值为1或0
    4char 定长的非unicode character数据,长度为8,000个字符
    5cursor 含有对游标的引用的变量或存储过程OUTPUT参数所采用的数据类型
    6datetime date和time数据,从1753年1月1日到9999年12月31日
    7decimal 定点精度和小数的numeric数据,从-10^38-1到10^38-1之间
    8float 浮点精度数字数据,从-1.79E+308到1.79E+308之间
    9image 长度可变的binary数据,最长为2^31-1字节
    10int 从-2^31到2^31-1之间的integer(整数)数据
    11money monetary数据值,从-2^63到2^63-1,准确度为货币单位的千分之一
    12nchar 定长的unicode数据,长度为4,000个字符
    13ntext 长度可变的unicode数据,最长为2^30-1个字符
    14numeric decimal的同义词
    15nvarchar 长度可变的unicode数据,最长为4,000字符
    16real 浮点精度数字数据,从-3.40E+38到3.40E+38之间
    17rowversion 数据库范围内的唯一号
    18smalldatetime date和time数据,从1900年1月1日到2079年6月6日
    19smallint 从-2^15到2^15-1之间的integer数据
    20smallmoney monetary数据值,-214,748.3648到+214,748.3647之间
    21sql_variant 可存储多种SQL Server支持的数据类型的值的数据类型,
    22 但不存储text, ntext, timestamp和sql_variant类型的值
    23sysname 系统提供的用户定义的数据类型,为nvarchar(128)的同义词
    24table 一种特殊的数据类型,可用于为以后进行处理而存储结果集
    25text 长度可变的非unicode数据,最长为2^31-1个字符
    26timestamp 数据库范围内的唯一号
    27tinyint 从0到255之间的integer数据
    28uniqueidentifier全局唯一标识符(GUID)
    29varbinary 长度可变的binary数据,最长为2^31-1字节
    30varchar 长度可变的非unicode数据,最长为8,000个字符
    来源:http://lawrenceliu.blog.hexun.com/15556520_d.html
      

  4.   

    --接一楼.
    在SQL Server 2005中升级存储过程作者:Serdar Yegulalp  2007-05-29     《SQL Server 2005的变化》一文中揭示了SQL Server 2005的变化如何打破了旧有的应用程序和数据库,特别是使用被抛弃的函数的地方。现在我将要讨论的是如何在你的移植过的数据库里面使用存储过程来充分利用这个SQL Server2005中的新函数,而不需要打破现有的功能性。     我们假设你有一个前端的应用程序,是由不同的团队来分别写入或者管理,并且它不像后台数据库那样频繁更新。你想要在SQL Server应用程序的存储过程中进行修改以充分利用新的功能。你还想要这个过程尽量温和,这样数据库和前端应用程序就都不会突然崩溃。     例如,你想要更新存储过程来使用SQL Server 2005的T-SQL中一些新的功能,例如TRY and CATCH函数,这个函数可以让复杂的错误追踪变得简单一点。你通常会拷贝现有的存储过程到一个新的并行的存储过程里面去,然后对它进行更新,使用新的功能,然后或者在经过修改的前端应用程序版本,或者查询分析器中测试两方面的行为。     当你很自信新的存储过程的行为是正确的,并且它也准备好用在产品中,你就可以无缝的替换它,例如通过修改两个存储过程的名字,或者通过代码的拷贝。我个人倾向于修改名字,因为这可以让你对原有的代码做个备份——像你的数据库中的其它东西一样,做个备份,以防出现不可预期的问题。     这是相对标准的技术,但是我曾见过的更有意思的一个问题涉及了可选参数传递: CREATE PROCEDURE my_procedure
    {其它的参数在这里},
    @optionalparameter Boolean=FALSE
    AS
    If @optionalparameter=TRUE
    Begin
    {带有SQL Server 2005-特定命令的新版本的存储过程放在这里}
    End
    Else
    Begin
    {旧版本的存储过程放在这里}
    End     还有另外一种有用的方式来选择性的测试代码。现有的前端对存储过程的呼叫不会使用可选参数,还会执行原来的代码。你可以在这里使用新的前端代码来测试存储过程,然后优雅地更新对现有存储过程的参考。因为参数是可选的,所有现有的对存储过程的呼叫(例如那些没有参数的呼叫)都会像以前一样准确地传递过去。     如果你不能添加新的存储过程,但是可以修改现有的存储过程的话,还有一种在这种限制下的好办法。当没有保留历史遗留代码的时候,你可以在存储过程中逐步淘汰IF。最后,在存储过程和你的前端代码中逐渐放弃可选参数。
    4.sql2005和sql2000的价格差? 
      没买过,都是别人买的,然后刻录.听说sql2005在15000-18000左右.
    5.sql2005和sql2000的硬件要求区别? 
    /*
    标题:sql server 2000 的硬件和软件安装要求
    作者:爱新觉罗.毓华 
    时间:2008-05-05
    地点:广东深圳
    */一、硬件要求
    以下说明安装 Microsoft SQL Server 2000 或 SQL Server 客户端管理工具和库的硬件要求。硬件         最低要求 
    计算机       Intel 或兼容机 
    Pentium      166 MHz 或更高。
    内存(RAM)    企业版:至少 64 MB,建议 128 MB 或更多 
                 标准版:至少 64 MB
                 个人版:Windows 2000 上至少 64 MB,其它所有操作系统上至少 32 MB
                 开发版:至少 64 MB
                 Desktop Engine:Windows 2000 上至少 64 MB,其它所有操作系统上至少 32 MB
    硬盘空间     SQL Server 数据库组件:95 到 270 MB,一般为 250 MB 
                 Analysis Services:至少 50 MB,一般为 130 MB
                 English Query:80 MB
                 仅 Desktop Engine:44 MB
    监视器       VGA 或更高分辨率 
                 SQL Server 图形工具要求 800x600 或更高分辨率
    定位设备     Microsoft 鼠标或兼容设备 
    CD-ROM驱动器 需要 说明:
    1、根据操作系统的要求,可能需要额外的内存。
    2、实际的要求因系统配置和选择安装的应用程序和功能的不同而异。
    3、Microsoft SQL Server 2000 没有硬件兼容性列表 (HCL)。如果计算机满足上表所列的最低要求,则对于能够在 Microsoft Windows
       操作系统中使用的硬件,SQL Server 2000 软件即可运行。有关能够在 Windows 操作系统中使用的硬件的更多信息,
       请参见 Microsoft Windows 硬件兼容列表,该列表位于 Microsoft Web 站点。
    二、操作系统要求
    以下说明为使用 Microsoft SQL Server 2000 各种版本或组件而必须安装的操作系统。SQL Server 版本或组件 操作系统要求 
    企业版                Microsoft Windows NT Server 4.0、Microsoft Windows NT Server 4.0 企业版、Windows 2000 Server、
                          Windows 2000 Advanced Server 和 Windows 2000 Data Center Server。 
                          注意,SQL Server 2000 的某些功能要求 Microsoft Windows 2000 Server(任何版本)。
     
    标准版                Microsoft Windows NT Server 4.0、Windows 2000 Server、Microsoft Windows NT Server 企业版、
                          Windows 2000 Advanced Server 和 Windows 2000 Data Center Server。 个人版                Microsoft Windows Me、Windows 98、Windows NT Workstation 4.0、Windows 2000 Professional、
                          Microsoft Windows NT Server 4.0、Windows 2000 Server 和所有更高级的 Windows 操作系统。 开发版                Microsoft Windows NT Workstation 4.0、Windows 2000 Professional 和所有其它 Windows NT 和 
                          Windows 2000 操作系统。 仅客户端工具          Microsoft Windows NT 4.0、Windows 2000(所有版本)、Windows Me 和 Windows 98。 仅连接                Microsoft Windows NT 4.0、Windows 2000(所有版本)、Windows Me、Windows 98 和 Windows 95。 说明:在 Microsoft Windows NT Server 4.0 上,必须安装 Service Pack 5 (SP5) 或更高版本,这是 SQL Server 2000 所有版本的
          最低要求。SQL Server 2000 中文版不支持英文版的 NT 4.0 企业版。      SQL Server 2000 在 Windows NT 4.0 终端服务器上不受支持。      在不带网卡的 Windows 98 计算机上安装 SQL Server 2000 个人版,需要 Windows 98 第二版。三、Internet 要求
    以下说明与使用 Microsoft SQL Server 2000 相关的 Internet 要求。组件                      要求 
    Internet 软件             Microsoft SQL Server 2000 所有安装都需要 Microsoft Internet Explorer 5.0。Microsoft 管理控制台
                              (MMC) 和 HTML 帮助也需要 Microsoft Internet Explorer 5.0。最小安装已足够,而且 Internet Explorer 
                              不必是默认浏览器。 
                              Internet Explorer 5.0 要求的例外情况:如果使用"仅连接"选项而且不连接到要求加密的服务器,则带 
                              Service Pack 2 的 Microsoft Internet Explorer 4.01 就足够了。 
     
    Internet Information 服务 如果编写 XML 应用程序,请参见用于 SQL Server 的 IIS 虚拟目录管理的系统要求。 
    四、网络软件要求
        Microsoft Windows NT、Windows 2000、Windows Me、Windows 98 和 Windows 95 都具有内置网络软件。只有在使用 Banyan VINES 
        或 AppleTalk ADSP 时,才需要其它网络软件。Novel NetWare IPX/SPX 客户端支持由 Windows Networking 的 NWLink 协议提供。说明:安装 SQL Server 2000 之前,必须在操作系统级启用 TCP/IP。有关更多信息,请参见网络库。
    五、支持的客户端
        Microsoft SQL Server 2000 支持以下客户端:Windows NT Workstation、Windows 2000 Professional、Windows 98、Windows 95、
        Apple Macintosh、OS/2 和 UNIX。Macintosh、OS/2 和 UNIX 不支持 SQL Server 图形工具,而要求来自第三方供应商的 ODBC 客户端
        软件。六、其它 Microsoft 产品考虑事项
    以下 Microsoft 产品要求有 Service Release 或 Service Pack 才能正确操作 SQL Server 2000。1、Access 2000
       Microsoft Access 2000 要求安装 Microsoft Office 2000 Service Release 1 (SR1) 或 Access 2000 SR1 才能正确操作 
       SQL Server 2000。如果运行 Access 2000 的早期版本,则无法在 SQL Server 2000 上测试自动数据处理 (ADP) 应用程序。无法访问
       数据库关系图、存储过程、表设计或视图设计。   将来的 Access Service Release 中还要解决下面一些问题: 
       1)、当在 SR1 中运行 Access 2000 时,可以测试 ADP 应用程序。还可以更改数据库关系图、存储过程、表设计或视图设计,但是无法
           保存任何更改。将来的 Access Service Release 允许有限的保存更改能力。
       2)、Access 2000 创建数据库向导无法成功创建 SQL Server 2000 数据库。若要解决此问题,可以先使用 SQL Server 企业管理器创建
           数据库,然后在 Access 2000 中使用"新建"对话框上的"项目(现有数据库)"选项创建数据库的 ADP。
       3)、Access 2000 升迁向导不支持升迁到 SQL Server 2000。若要解决此问题,可使用企业管理器中的数据转换服务将 MDB 数据库文件
           导入 SQL Server。然后可以重命名 MDB 表,并创建所得到的 SQL Server 数据库的链接表,其名称与原始的 MDB 表名相同。 2、Visual Studio 6.0
       在运行 Microsoft Visual Studio 6.0 时,无法访问 SQL Server 2000 中的数据库关系图、存储过程、表设计或视图设计。
       Visual Studio 6.0 Service Pack 4 使您得以更改数据库关系图、存储过程、表设计或视图设计,但是无法保存它们。将来的 
       Visual Studio Service Pack 允许有限的保存更改能力。   SQL Server 2000 工具无法访问使用 Visual Studio 6.0 中的设计工具保存的数据库关系图,直到修改了数据库中的 dtproperties 
       表为止。下表列出了运行 Microsoft SQL Server 2005 Express Edition (SQL Server Express) 的必备软件以及最低硬件和软件要求。若要确定计算机是否符合系统要求,请在“开始”菜单中,右键单击“我的电脑”,再单击“属性”。“常规”选项卡将显示 CPU 类型和速度,以及已安装的内存 (RAM) 的容量。系统要求(32 位)
      
    必备软件
     Microsoft .NET FrameworkMicrosoft Internet Explorer 6.0 SP1 或更高版本(.NET Framework 必备)
     
    RAM
     最低要求:192 MB推荐使用:512 MB 或更大空间
     
    硬盘空间
     600 MB 可用空间
     
    处理器
     兼容 Pentium III 或更高版本最低要求:500 MHz 推荐使用:1 GHz 或更高
     
    操作系统
     Windows Server 2003 Standard EditionWindows Server 2003 Enterprise EditionWindows Server 2003 Datacenter EditionWindows XP Professional SP2 或更高版本Windows 2000 Professional SP4 或更高版本Windows 2000 Server SP4 或更高版本Windows 2000 Advanced Server SP4 或更高版本Windows 2000 Datacenter Server SP4 或更高版本Windows XP Home Edition注意 此版本不支持 Virtual Server、Virtual PC、Windows 2003 Embedded Edition、Windows Small Business Server 2003 Standard Edition、Windows Small Business Server 2003 Premium Edition、Windows XP Media Edition 或 Windows XP Tablet Edition。
     
      

  5.   

    Sql2005比2000 增加了很多功能
    最常见的是增加了很多语法
    在olap中增加了更多的统计方式sql2005对于服务器的性能有更高的要求,支持64位操作系统4个G的内存对于sql2005来说经常能占满有些程序比如VB连接2005不稳定
      

  6.   

    楼主对架构的理解中包含硬件是不准确的,如果软件支持建议升级至05。
    就拿我公司打比方:A数据库在SQL2000上,B数据库在SQL05上。
    B数据库从2k升级至05后,性能提升了一些,但硬件也从236换到3850;
    而A数据库一直是2K,从236换到3850 M2了,相比硬件的升级,数据库性能提升不大。
    建议楼主与开发人员沟通软件架构方面是否要调整,再考虑升级及更换硬件。
    对于4问题,我就不好回答了:)
        5问题,在安装包中有硬件检测。
      

  7.   

    dawugui
    强!看得我眼都花了!
      

  8.   

    网站数据库主要考虑安全性和网络带宽。
    SQL05内存4个G是较低的配置。数据库文件目前2个G,考虑每日业务增加量,计算一下数据库大小的年增量。
      

  9.   

    sql2005最吸引我的是varchar(max)
    另外分区表的使用也简化的一点
      

  10.   

    哦,缺点是sql2005的管理器比sql2000的要慢很多,可能是.net程序的机制导致的
      

  11.   

    那各位老大,我到底应该选择sql2000 好 还是sql2005
      

  12.   

    不考虑价格,没有历史包袱,应该是选sql2005了,甚至2008都可以