小弟原来使用sql2000(sp3)企业版做数据库服务器,但是现在听说sql2005已经很稳定和使用非常普遍了,但是sql2005与sql2000的区别小弟还不清楚,有以下问题想咨询一下大家:1.现在用sql2005做数据服务器的都是什么配置,比如sql2005企业版(sp2)之类的
2.sql2005的性能(查询和执行速度之类的)与sql2000的差别
3.如果从sql2000升级到sql2005代码有什么改变?
4.sql2005和sql2000的价格差?
5.sql2005和sql2000的硬件要求区别?针对以上情况请大家指点,非常感谢!
2.sql2005的性能(查询和执行速度之类的)与sql2000的差别
3.如果从sql2000升级到sql2005代码有什么改变?
4.sql2005和sql2000的价格差?
5.sql2005和sql2000的硬件要求区别?针对以上情况请大家指点,非常感谢!
解决方案 »
- 查询中如何判断?
- 请问能用存储过程来读写ini文件的内容吗?
- 急!急!两题关于数据结构的题目,各位高手请帮帮忙,在线等
- 获取日期是星期中哪一天的问题
- 大家看看这个sql语句怎么写
- 100分求解:往存储过程里传参数,能不能大于8000?
- sql2005 未能加载包“Microsoft SQL management Studio package”
- 执行SQL触发器的时候,如何让它弹出一个窗口,提示执行成功或失败啊?是窗口,不是消息.哥们么?
- 如何在存储过程中访问由另一个存储过程产生的记录集?
- 求查询语句,两个表A,B,一个表的数据作为另一个表的字段。急急!!!
- SQL server 2005如何以单用户模式运行???
- 请大家帮忙看看下面这个句子错在哪里
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的查询应该尝试用临时表或者表变量等手段使之使用邦定变量。结果待续
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 操作(因为本来就是排序的嘛)。
可以指定一个数字表达式,以返回要通过查询影响的行数或百分比,还可以根据情况使用变量或子查询。可以在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
在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。
最常见的是增加了很多语法
在olap中增加了更多的统计方式sql2005对于服务器的性能有更高的要求,支持64位操作系统4个G的内存对于sql2005来说经常能占满有些程序比如VB连接2005不稳定
就拿我公司打比方:A数据库在SQL2000上,B数据库在SQL05上。
B数据库从2k升级至05后,性能提升了一些,但硬件也从236换到3850;
而A数据库一直是2K,从236换到3850 M2了,相比硬件的升级,数据库性能提升不大。
建议楼主与开发人员沟通软件架构方面是否要调整,再考虑升级及更换硬件。
对于4问题,我就不好回答了:)
5问题,在安装包中有硬件检测。
强!看得我眼都花了!
SQL05内存4个G是较低的配置。数据库文件目前2个G,考虑每日业务增加量,计算一下数据库大小的年增量。
另外分区表的使用也简化的一点