博文

SQL Server 2005新功能 (2006-04-16 00:22:00)

摘要: 举几个例子来简单说明 这些例子我引用了Northwind库。 1. TOP 表达式
SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。  --前n名的订单
declare @n int 
set @n = 10 
select TOP(@n) * from Orders
2. 分页
不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。   --按Freight从小到大排序,求20到30行的结果 
select * from( 
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 
) a 
where row between 20 and 30
3. 排名
select * from( 
    select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders 
) a 
where rank between 20 and 30
4. try ... catch
SQL Server 2000没有异常,T-SQL必须逐行检查错误代码,对于习惯了try ......

阅读全文(3252) | 评论:0

SQL Server 2005中的T-SQL增强 (2006-04-12 00:21:00)

摘要:丰富的数据类型 Richer Data Types 

1、varchar(max)、nvarchar(max)和varbinary(max)数据类型最多可以保存2GB的数据,可以取代text、ntext或image数据类型。
CREATE TABLE myTable
(
    id INT,
    content VARCHAR(MAX)
) 2、XML数据类型
XML数据类型允许用户在SQL Server数据库中保存XML片段或文档。 错误处理 Error Handling

1、新的异常处理结构

2、可以捕获和处理过去会导致批处理终止的错误
前提是这些错误不会导致连接中断(通常是严重程度为21以上的错误,例如,表或数据库完整性可疑、硬件错误等等。)。

3、TRY/CATCH 构造
SET XACT_ABORT ON
   BEGIN TRY
     <core logic>
   END TRY
   BEGIN CATCH TRAN_ABORT
     <exception handling logic>
   END TRY @@error may be quired as first statement in CATCH block 4、演示代码
USE demo
  GO
  --创建工作表   CREATE TABLE student
  ( 
      stuid INT NOT NULL PRIMARY KEY,
      stuname VARCHAR(50)
  )

  CREATE TABLE......

阅读全文(2167) | 评论:0

SQL Server 2000对XML的支持(2006-04-12 00:19:00)

摘要: SQL Server 2000就已经有了对XML的支持,这种支持主要体现在FOR XML子句和SQLXML上。然而,这些支持并不充分,因为在SQL Server 2000里,归根结底是用关系型的数据表来模拟XML数据,由于关系型数据先天上的缺点,让它模拟表现力和扩展性更强的XML数据必然模拟得不伦不类,要实现具有一定格式的XML代码,往往需要写很复杂的SQL语句。此外,由于SQL Server 2000发布得比较早,它对XPath的支持也不全面,更不要说现在的XQuery了。因此,在真实项目中,一旦遇到比较复杂的XML,往往很少会使用FOR XML子句,而是直接将XML代码保存在数据表的text类型字段中。然而,text字段是不会对XML代码是否完整以及是否符合某个Schema的格式而进行验证的。于是,采用得比较多的办法是用对XML支持比较强的语言在客户端对XML进行操作,然后更新到数据库中。但是,对保存在text字段中的XML代码进行查询的效率就很难保证了。 XML数据类型     在SQL Server 2005中,对XML的支持得到了很好的加强。最关键的一点就是,微软在SQL Server 2005中提供了一个新的数据类型,即XML数据类型,从此告别了用关系型数据来模拟XML数据的历史。因此,以后XML数据可以直接保存到数据表的一个字段中了。     XML数据类型是一用专门用于保存和操作XML的数据类型。它是以BLOB的二进制形式保存的,一个XML类型字段可以保存2GB的XML代码,层次可达128层。此外,XML数据类型还有检验XML数据完整性的功能,比以前用text类型保存XML数据方便得多。     如下代码就创建了一个带有XML类型字段xCol的数据表docs,并且为该字段添加了一个“书籍作者的姓和名不能相等”的用自定义函数实现的约束,最后还插入了一条记录。 CREATE FUNCTION udf_Check_Names (@xmlData XML)
RETURNS INT AS
BEGIN
RETURN (SELECT @xmlData.exist('/book/author[first-name = last-name]......

阅读全文(3677) | 评论:0

无废话-SQL Server 2005新功能(1) - TSQL (2006-01-23 23:47:00)

摘要: SQL Server 2005相对于SQL Server 2000改进很大,有些还是非常实用的。 举几个例子来简单说明 这些例子我引用了Northwind库。 1. TOP 表达式
SQL Server 2000的TOP是个固定值,是不是觉得不爽,现在改进了。  --前n名的订单
declare @n int 
set @n = 10 
select TOP(@n) * from Orders
2. 分页
不知各位过去用SQL Server 2000是怎么分页的,大多都用到了临时表。SQL Server 2005一句话就支持分页,性能据说也非常不错。 --按Freight从小到大排序,求20到30行的结果 
select * from( 
    select OrderId, Freight, ROW_NUMBER() OVER(order by Freight) as row from Orders 
) a 
where row between 20 and 30
3. 排名
select * from( 
    select OrderId, Freight, RANK() OVER(order by Freight) as rank from Orders 
) a 
where rank between 20 and 30
4. try ... catch
SQ......

阅读全文(2185) | 评论:0

ORACLE回滚段管理(2006-01-22 00:27:00)

摘要:回滚段管理一直是ORACLE数据库管理的一个难题,本文通过实例介绍ORACLE回滚段的概念,用法和规划及问题的解决。 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值)。回滚段的头部包含正在使用的该回滚段事务的信息。一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回滚信息。 回滚段的作用 事务回滚:当事务修改表中数据的时候,该数据修改前的值(即前影像)会存放在回滚段中,当用户回滚事务(ROLLBACK)时,ORACLE将会利用回滚段中的数据前影像来将修改的数据恢复到原来的值。 事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,ORACLE将在下次打开数据库时利用回滚来恢复未提交的数据。 读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话未提交的修改。而且,当一个语句正在执行时,该语句将看不到从该语句开始执行后的未提交的修改(语句级读一致性)。当ORACLE执行SELECT语句时,ORACLE依照当前的系统改变号(SYSTEMCHANGENUMBER-SCN)来保证任何前于当前SCN的未提交的改变不被该语句处理。可以想象:当一个长时间的查询正在执行时,若其他会话改变了该查询要查询的某个数据块,ORACLE将利用回滚段的数据前影像来构造一个读一致性视图。 事务级的读一致性 ORACLE一般提供SQL语句级(SQLSTATEMENTLEVEL)的读一致性,可以用以下语句来实现事务级的读一致性。 SETTRANSACTIONREADONLY; 或: SETTANNSACTIONSERIALIZABLE; 以上两个语句都将在事务开始后提供读一致性。需要注意的是,使用第二个语句对数据库的并发性和性能将带来影响。 回滚段的种类 系统回滚段:当数据库创建后,将自动创建一个系统回滚段,该回滚段只用于存放系统表空间中对象的前影像。 非系统回滚段:拥有多个表空间的数据库至少应该有一个非系统回滚段,用于存放非系统表空间中对象的数据前影像。非系统回滚段又分为私有回滚段和公有回滚段,私有回滚段应在参数文件的ROLLBACKSEGMENTS参数中列出,以便例程启动时自动使其在线(ONLINE)。公有回滚段一般在OPS(ORACLE并行服务器)中出现,将......

阅读全文(1686) | 评论:0

ORACLE 锁 (2006-01-22 00:23:00)

摘要:ORACLE数据库是现今数据库领域应用最广泛的,同时它也是一个庞大的系统,全面了解它、玩转它不但需要一定的理论知识,更需要开发经验与工程经验。本人是ORACLE一爱好者,以下是本人对ORACLE锁的一些经验,希望能与大家共同分享。

  ORACLE锁具体分为以下几类:

1.按用户与系统划分,可以分为自动锁与显示锁

  自动锁:当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。

  显示锁:某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。

2.按锁级别划分,可分为共享锁与排它锁

  共享锁:共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。共享锁为事务提供高并发性,但如拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。

  排它锁:事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。

3.按操作划分,可分为DML锁、DDL锁

  +DML锁又可以分为,行锁、表锁、死锁

    -行锁:当事务执行数据库插入、更新、删除操作时,该事务自动获得操作表中操作行的排它锁。

    -表级锁:当事务获得行锁后,此事务也将自动获得该行的表锁(共享锁),以防止其它事务进行DDL语句影响记录行的更新。事务也可以在进行过程中获得共享锁或排它锁,只有当事务显示使用LOCK TABLE语句显示的定义一个排它锁时,事务才会获得表上的排它锁,也可使用LOCK TABLE显示的定义一个表级的共享锁(LOCK TABLE具体用法请参考相关文档)。

    -死锁:当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就出现死锁。
        如事务1在表A行记录#3中有一排它锁,并等待事务2在表A中记录#4中排它锁的释放,而事务2在表A记录行#4中有一排它锁,并等待事务; 1在表A中记录#3中排它锁的释放,事务1与事务2彼此等待,因此就造成了死锁。死锁一般是因拙劣的事务设计而产生。死锁只能使用SQL下:alter system kill se......

阅读全文(1635) | 评论:0

利用SQL*Loader将 Excel 数据导出到 Oracle 数据库中 (2006-01-22 00:19:00)

摘要: 系统环境: 1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:\ORACLE
实现步骤: 1、打开MicroSoft Excel 2000 2、文件(F)→新建(N)→工作簿→ 3、输入以下数据,存盘为test.xls,如图: 4、文件(F)→另存为(A)→ 保存类型为:制表符分隔,起名为text.txt,保存到C:\ 5、连入SQL*Plus 以system/manager用户登录, SQL> conn system/manager 创建表结构 SQL> create table test     (     id       number,        --序号     username    varchar2(10),     --用户名     password    varchar2(10),     --密码     sj       varchar2(20)      --建立日期     ); 6、创建SQL*Loader输入数据所需要的文件,均保存到C:\,用记事本编辑: 控制文件:input.ctl,内容如下:   load data           --1、控制文件标识   infile 'test.txt'       --2、要输入的数据文件名为test.txt   append into table test    --3、向表test中追加记录   fields terminated by X'09'  --4、字段终止于X'09',是一个制表符(TAB)   (id,username,password,sj)   -----定义列对应顺序 a、insert,为缺省方式,在数据装载开始时要求表为空 b、append,在表中追加新记录 c、replace,删除旧记录,替换成新装载的记录 d、truncate,同上 7、在DOS窗口下使用SQL*Loader命令实现数据的输入 C:\>sqlldr us......

阅读全文(1821) | 评论:0

程序员必看:关于SQL Server的若干注意事项(2006-01-22 00:12:00)

摘要:如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其中大多数也可以用于其它的DBMS)。 在这里,我不打算介绍使用SQL Server的窍门,也不能提供一个包治百病的方案,我所做的是总结一些经验----关于如何形成一个好的设计。这些经验来自我过去几年中经受的教训,一直来,我看到许多同样的设计错误被一次又一次的重复。 你了解你用的工具吗? 不要轻视这一点,这是我在这篇文章中讲述的最关键的一条。也许你也看到有很多的SQL Server程序员没有掌握全部的T-SQL命令和SQL Server提供的那些有用的工具。 “什么?我要浪费一个月的时间来学习那些我永远也不会用到的SQL命令???”,你也许会这样说。对的,你不需要这样做。但是你应该用一个周末浏览所有的T-SQL命令。在这里,你的任务是了解,将来,当你设计一个查询时,你会记起来:“对了,这里有一个命令可以完全实现我需要的功能”,于是,到MSDN查看这个命令的确切语法。 不要使用游标 让我再重复一遍:不要使用游标。如果你想破坏整个系统的性能的话,它们倒是你最有效的首选办法。大多数的初学者都使用游标,而没有意识到它们对性能造成的影响。它们占用内存,还用它们那些不可思议的方式锁定表,另外,它们简直就像蜗牛。而最糟糕的是,它们可以使你的DBA所能做的一切性能优化等于没做。不知你是否知道每执行一次FETCH就等于执行一次SELECT命令?这意味着如果你的游标有10000条记录,它将执行10000次SELECT!如果你使用一组SELECT、UPDATE或者DELETE来完成相应的工作,那将有效率的多。 初学者一般认为使用游标是一种比较熟悉和舒适的编程方式,可很不幸,这会导致糟糕的性能。显然,SQL的总体目的是你要实现什么,而不是怎样实现。 我曾经用T-SQL重写了一个基于游标的存储过程,那个表只有100,000条记录,原来的存储过程用了40分钟才执行完毕,而新的存储过程只用了10秒钟。在这里,我想你应该可以看到一个不称职的程序员究竟在干了什么!!! 我们可以写一个小程序来取得和处理数据并且更新数据库,这样做有时会更有效。记住:对于循环,T-SQL无能为力。 ......

阅读全文(1656) | 评论:1

NT下如何彻底删除Oracle&nbsp;(2006-01-22 00:06:00)

摘要:软件环境:
1、Windows 2000+ORACLE 8.1.7
2、ORACLE安装路径为:C:\ORACLE 实现方法:
1、开始->设置->控制面板->管理工具->服务停止所有Oracle服务。 2、开始->程序->Oracle - OraHome81->Oracle Installation Products->Universal Installer卸装所有Oracle产品,但Universal Installer本身不能被删除 5、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口。 6、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口。 7、运行refedit,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口。 8、开始->设置->控制面板->系统->高级->环境变量删除环境变量CLASSPATH和PATH中有关Oracle的设定 9、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标 10、删除\Program Files\Oracle目录 11、重新启动计算机,重起后才能完全删除Oracle所在目录 12、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,并从Windows 2000目录(一般为C:\WINNT)下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等。 13、WIN.INI文件中若有[ORACLE]的标记段,删除该段 14、如有必要,删除所有Oracle相关的ODBC的DSN 15、到事件查看器中,删除Oracle相关的日志 说明:
如果有个别DLL文件无法删除的情况,则不用理会,重新启动,开始新的安装,安装时,选择一个新的目录,则,安装完毕并重新启动后,老的目录及文件就可以删除掉了。
 ......

阅读全文(1549) | 评论:0

ACCESS中如何使用SQL(2006-01-09 21:52:00)

摘要:ACCESS中是很少有人用SQL去做设计,去查询,是不是ACCESS中没有类似于SQLSERVER这样的查询分析器,其实是有的,下面来看看是怎么切换的:   当你打开一个查询以后,单击“新建方法”列表的时候并没有一个“使用SQL视图创建查询”的选项,   这也表明ACCESS并不提倡在工作中使用SQL语言,那我们就单击“在设计视图中创建查询”这一项,之后将会在屏幕上出现一个设计视图,   现在我们要切换到SQL视图,只要将鼠标移动到工具栏最左面的“视图”选项按钮右边的向下按钮上,单击鼠标左键,在弹出的下拉菜单中选中“SQL 设计视图”项就可以将视图切换到SQL状态。  ......

阅读全文(4211) | 评论:1