RSS订阅
RSS订阅TT数据库

SQL Server 2005中的T-SQL

2008-8-11  选择字号:  | |
打印本文章

导读:SQL Server 2005中一个有价值的特征就是不分职位、行业、公司规模和从业时间的加强的T-SQL,本文是对有关Transact-SQL编程扩展的一些贴士的介绍。

关键词:SQL Server 2005 T-SQL SQL Server 2005中的T-SQL

正在加载数据... 【TechTarget中国原创】将于12月份发布的SQL Server 2005目前正处于准备阶段,最近,我研究了一份对Edgewood Solutions客户进行的调查,调查中询问他们认为什么是微软的新发布的数据库中最有价值的特性。一个不分职位、行业、公司规模和从业时间的常见回答就是加强的T-SQL。这些发现可以作为以下有关Transact-SQL编程扩展的贴士的基础。

【TechTarget中国原创】简介

  将于12月份发布的SQL Server 2005目前正处于准备阶段,最近,我研究了一份对Edgewood Solutions客户进行的调查,调查中询问他们认为什么是微软的新发布的数据库中最有价值的特性。一个不分职位、行业、公司规模和从业时间的常见回答就是加强的T-SQL。这些发现可以作为以下有关Transact-SQL编程扩展的贴士的基础。

  错误处理:TRY 和CATCH

  将行转换为列:PIVOT 和UNPIVOT

  XML改进

  贴士1:用TRY和CATCH进行错误处理

  自带的错误处理是T-SQL经常被用来与其他语言进行比较的缺点。SQL Server 2005引入了TRY和CATCH,与其他许多数据库一样。通过使用这种许多开发人员和数据库管理员都熟悉的方式来进行错误处理将大大提高对SQL Server的信心。

以下是引用片段:
 BEGIN TRY
  select 1/0;
  END TRY
  BEGIN CATCH
  select
  ERROR_NUMBER() AS ErrorNumber,
  ERROR_SEVERITY() AS ErrorSeverity,
  ERROR_STATE() AS ErrorState,
  ERROR_PROCEDURE() AS ErrorProcedure,
  ERROR_LINE() AS ErrorLine,
  ERROR_MESSAGE() AS ErrorMessage;
  END CATCH;
 

  通过PIVOT 和UNPIVOT将行转换为列

  一位在保健公司上班的开发人员每当她的报告用户想要将行转换为列的时候,抱怨不止。这并不是一次良好的会话。她不得不编写一些需要执行好多个CPU周期的复杂的代码来给用户提供他们想要的数据,对这些数据的要求是在正式报告需求基础之上产生的。这些痛苦的会话在SQL Server 2005引入PIVOT和UNPIVOT命令之前是常见的事。这两个命令可以在几乎不需要修改代码的情况下快速地将行转换为列或者由列转换为行。

 


 USE AdventureWorks;
  GO
  select VendorID, [164] AS Emp1, [198] AS Emp2, [223] AS Emp3, [231] AS Emp4, [233] AS Emp5
  FROM
  (select PurchaseOrderID, EmployeeID, VendorID
  FROM Purchasing.PurchaseOrderHeader) p
  PIVOT
  (
  count (PurchaseOrderID)
  FOR EmployeeID IN
  ( [164], [198], [223], [231], [233] )
  ) AS pvt
  ORDER BY VendorID


  资源: 使用 PIVOT 和UNPIVOT, SQL Server 2005 在线书籍:ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.en/udb9/html/24ba54fc-98f7-4d35-8881-b5158aac1d66.htm

  改进的XML

  XML普遍应用在通过许多异构的环境进行数据传输和在许多微软的应用程序之间传输数据上;SQL Server 2005 XML特性改善了创建、存储、传输和查询XML数据的内在能力。现在可以在SQL Server中自然地完成如下:

  创建一个可以被表的某列引用的XML计划

  create XML SCHEMA COLLECTION [ . ]sql_identifier AS Expression

  为一个表创建一个本地的数据类型,这个表在创建的时候具有指向XML计划集合的指针,同时这个表放在与基本表不同的数据页上,就像SQL Server 2000中的BLOB。

 


 create TABLE Orders
  (OrderID int PRIMARY KEY NOT NULL,
  OrderDetailsID int NOT NULL,
  OrderDate datetime NOT NULL,
  …
  XMLOrder xml NOT NULL)
 
  为存储过程或者特别的事务创建一个变量作为XML数据类型

  DECLARE @OrdersSchema xml

  …

  create XML SCHEMA COLLECTION OrdersSchema AS @OrdersSchema

  通过创建主要和第二索引来提高对XML数据访问的速度


create PRIMARY XML INDEX PXML_Orders_OrderID
  ON OrdersSchema.Orders (OrderID);
  GO
  create XML INDEX SXML_Order_OrderDetailsID
  ON OrdersSchema.Orders (OrderDetailsID)
  USING XML INDEX PXML_Orders_OrderID FOR PATH ;
  GO
 
  通过一个简单的select语句来查询XML数据,将XML作为结果集的一部分,与表中余下的字段一起返回。


 select *
  FROM Orders
  where OrderID = 123
 

  结论

  SQL Server 2005中的T-SQL通过扩展传统关系型数据库管理系统获得了长足的进步。以上描述的各项只是冰山一角,T-SQL还有其他方面的提高,检查DTS——现在是SQL Server集成服务,分析服务,报告服务等。这些都是有挑战性的,然而令人兴奋的是,了解SQL Server所有这些新功能的日子不远了。

还没有登录? 阅读全文请先登录或注册
用户名:(请填写您的E-mail做为登录账号)
  • 获取最新的IT业界资讯、市场动态、行业趋势等独家原创内容。
  • 分享国内外技术专业人士提供的技巧经验。
  • 利用专注IT的技术资源中心,不断更新专业知识。
  • 享受白皮书、Webcast等系列特色增值服务。
  • 免费参加TT中国举办的各种会员活动。
  • 更多的精彩服务,在不断开发中……
用户名:(请填写您的E-mail)
密 码:
 永久登录
请输入您的登录email:
本文主要介绍了其他查询技巧,如DISTINCT、ORDER BY语法、尽可能用Stored Procedure取代应用程序直接存取数据表以及尽可能在数据来源层,就先过滤数据等等方面。
如何避免在WHERE子句中对字段使用函数?怎样使用AND与OR?我们又应当怎样适当地使用自查询?本文对上述问题作了详细解释。
有些程序员在撰写数据库应用程序时,常专注于OOP及各种framework的使用,却忽略了基本的SQL语句及其「性能(performance)优化」问题。
很有可能你会碰到一位想用CLR的开发人员,或者你发现自己需要实施一个用标准SQL Server对象和T-SQL语言不容易实现的、复杂的事务规则,所以你就可以用CLR创建一个函数……
SQL Server和T-SQL数据操纵包括哪些方面的内容?本文主要介绍了设计、存储过程、自定义函数、以及触发器等方面的内容。

本专题介绍了SQL Server服务代理相关方面的知识,包括SQL Server服务代理基础知识的概述、消息类型、契约、队列、服务和路由、SEND命令和RECEIVE命令、性能方面的改进以及对运行状况的监控等等。

无论你是否计划将SQL Server数据库转换服务(DTS)包迁移到SQL Server集成服务(SSIS)或在SQL Server 2005里运行DTS包,都需要专家的一些建议。这一指南主要是包括SSIS的相关基础知识、技巧帮助你进行SSIS调整,还介绍了SSIS有经验的一些用户的具体信息等等。

子查询是一个嵌套在SELECT、INSERT、UPDATE 或DELETE语句,或者另一个子查询里的查询。一个子查询可以返回一行或多行结果给父查询。标量子查询是只返回一个值的查询:只有一个字段的一行记录。标量子查询可以在SQL语句的大多数位置,其中你可以使用一个表达式或一个实际值。
最新更新
专家答疑
技巧
Michael Hillenbrand
你能解释一下数据库公程师、数据库架构师以及数据库管理员之间有什么区别吗?数据库管理员:这是目前最普遍使用的对从事数据库相关的工作的人的头衔。数据库管理员是指……
Brian Peasland
对5GB大小的Oracle 7.3存档或删除的最佳办法是什么?为了便于管理机构查询,这些数据至少需要再用20年的时间。我们担心将来我们不能对它重新获取并迁入一个更新的……
Rudy Limeback
如何创建一个约束限制2007年1月1日之前的日期被录入?用CHECK约束就可以。如下面的示例……