为什么Microsoft创建自己的SQL扩展(T-SQL)?

时间:2009-07-14 06:39:36

标签: sql-server tsql

Microsoft将自己的SQL扩展实现为Transact SQL(T-SQL)的原因是什么?它比普通的SQL有什么优势?

6 个答案:

答案 0 :(得分:5)

每个人都扩展SQL。

SQL不是程序性的,它是声明式的。你描述了你想要的东西,它会弄清楚如何使用任何索引或哈希或者可用的东西来检索它。

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

答案 1 :(得分:4)

Transact-SQL(T-SQL)是Microsoft和Sybase的SQL专有扩展。 Microsoft的实现附带在Microsoft SQL Server产品中。 Sybase在其Adaptive Server Enterprise中使用该语言,后者是Sybase SQL Server的后续版本。 Transact-SQL使用以下附加功能增强了SQL:

  • 流量控制语言
  • 本地变量
  • 字符串处理,日期处理,数学等各种支持功能。
  • 改进[引用需要]删除和更新语句

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

Wiki将您连接到更多不断扩展的信息和细节。

答案 2 :(得分:4)

  

Microsoft将自己的SQL扩展名实施为Transact SQLT-SQL)背后的原因是什么?

让您的生活更轻松。

  

与普通SQL相比,它有什么优势?

没有“普通SQL

这样的东西

Transact-SQL两者都增强了SQL的基于集合的能力,并增加了程序能力。

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

微软没有做出如此严格的区分。

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

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

或多或少得到普遍支持的标准SQL:92,但它仍然非常缺乏真正有用的标准。

这就是为什么几乎所有超出简单SELECTJOIN的任务都需要一些专有支持才能有效实施。

答案 3 :(得分:2)

值得注意的是,虽然大多数RDBMS提供程序明确区分了它们对SQL的扩展和用于编写存储过程和触发器的编程语言等,但Microsoft和Sybase完全相反,它们将这两个概念混合在一起合二为一,即T-SQL。在编写普通查询时使用T-SQL,但在编写存储过程和触发器时也可以(通常也可以)使用T-SQL。

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

如今微软区分了T-SQL存储过程和为CLR(即.NET)编写的过程,但这是一个相对较新的开发(从SQL Server 2005开始)。

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

答案 4 :(得分:1)

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

根据Wikipedia,它于1996年通过,但我怀疑这是通常的问题:供应商已经承诺了他们自己的扩展,因此标准被推迟了很长一段时间

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

答案 5 :(得分:0)

供应商创建自己的SQL风格的另一个非常重要的原因是性能调优。使用特定于供应商的代码编写更多高性能查询有很多方法,这些代码是为了利用特定数据库引擎的工作方式而编写的。