2009-07-14 75 views

回答

4

每个人都扩展SQL。

SQL不是程序性的,它是声明性的。你描述你想要的东西,并且找出如何使用任何索引或哈希或者什么都不可用来检索它。

但有时候,这还不够。 T-SQL提供了在你的查询中运行程序代码的语法。这使您可以控制结构(begin-end,if-then-else),在局部变量,临时表和其他源之间迭代和移动值。

4

Transact-SQL(T-SQL)是Microsoft和Sybase对SQL的专有扩展。微软的实施出现在Microsoft SQL Server产品中。 Sybase在其Adaptive Server Enterprise中使用该语言,这是Sybase SQL Server的后续产品。 的Transact-SQL增强SQL用这些附加特征:

  • 控制-流语言
  • 局部变量
  • 对字符串处理,数据处理,数学等
  • 各种支持功能
  • 改进[需要引用]删除和更新陈述

http://en.wikipedia.org/wiki/Transact-SQL

维基您连接到更多的扩展信息和细节。

2

在这里要注意的是,虽然大多数RDBMS供应商使他们的扩展SQL和用来编写存储过程和触发器等编程语言之间有明显的区别,微软和Sybase做完全相反,它们混合这两种概念合为一体,即T-SQL。在编写普通查询时使用T-SQL,但在编写存储过程和触发器时,您也可以(并且通常会)使用T-SQL。

这有鼓励(或至少使得很容易)创建的程序和SQL代码[*]混合有争议的好处。

如今微软使T-SQL存储过程和那些为CLR(例如,.NET)编写的区别,但这是一个相对较新的发展(从SQL Server 2005起)。

[*]:有争议的,因为不说话SQL谁的人会禁不住想编写程序代码(通常是非常数据库中低效的),而不是学习SQL(正确的事)。

4

什么是落后于微软实现了自己的SQL扩展为Transact SQLT-SQL)的原因是什么?

为了使您的生活更轻松。

它比正常的SQL有什么优势?

有“正常SQL

Transact-SQL既增强了SQL的基于集合的能力,并增加了程序的能力,没有这样的事情。

其他系统(如OraclePostgreSQLSQL和过程语言(PL/SQLpl/PgSQL)明确区分。

微软并没有作出这样的严格的区分。

Transact-SQLSybase围绕80's中等发达,当时有根本没有标准的(第一个是在1986提出)。

到那个时候每个供应商已有的遗留应用程序以支持负担,重写他们的数据库,以符合标准的会打破兼容性。

有或多或少的普遍支持的标准,SQL:92,但还惦记着非常非常要真正使用。

这就是为什么除了简单的SELECTJOIN之外几乎每个任务都需要一些专有支持才能有效实施。

0

另外一个为什么厂商建立自己的SQL的口味很重要的原因是性能调整。有很多方法可以使用供应商特定的代码编写更多的性能查询,这些代码是为了利用特定数据库引擎的工作方式而编写的。

1

适用于流程控制,本地变量等(即过程代码)的SQL标准被称为SQL/PSM(持久存储模块)。

根据Wikipedia它于1996年通过,但我怀疑这是通常的问题:厂商已经致力于自己的扩展,因此占用标准被推迟的时间

长时间......但不一定是无限期的,有希望。例如,SQL Server 2005中的公用表表达式(CTE)和OLAP函数以及SQL Server 2008中的时态数据类型表明TSQL的扩展将接近发布标准。