请联系我们

SQL Server 2008对T-SQL语言的增强

来源: 数据库 SQL Server |  作者: landluo |  发布: 2009-7-08 10:09


MERGE 的语法为:

[ WITH [,...n] ]

MERGE

[ TOP ( expression ) [ PERCENT ] ]

[ INTO ] target_table [ [ AS ] table_alias ]

[ WITH ( ) ]

USING

ON

[ WHEN MATCHED [ AND ]

THEN ]

[ WHEN [TARGET] NOT MATCHED [ AND ]

THEN ]

[ WHEN SOURCE NOT MATCHED [ AND ]

THEN ]

[ OPTION ( [ ,...n ] ) ]

;

::=

{ [

[ ,...n ] ]

[ [ , ] INDEX ( index_val [ ,...n ] ) ] }

::=

{

table_or_view_name [ [ AS ] table_alias ] [

]

[ WITH ( table_hint [ [ , ]...n ] ) ]

| rowset_function [ [ AS ] table_alias ]

[ ( bulk_column_alias [ ,...n ] ) ]

| user_defined_function [ [ AS ] table_alias ]

| OPENXML

| derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]

|

|

|

}

::=

{ UPDATE SET | DELETE }

::=

{ column_name = { expression | DEFAULT | NULL }

| { udt_column_name. { { property_name = expression

| field_name = expression }

| method_name ( argument [ ,...n ] ) } }

| column_name { .WRITE ( expression , @Offset , @Length ) }

| @variable = expression

} [ ,...n ]

::=

INSERT [ ( ) ]

{ VALUES ( )

| DEFAULT VALUES }

::=

{

[ OUTPUT INTO { @table_variable | output_table }

[ (column_list) ] ]

[ OUTPUT ]

}

::=

{ | scalar_expression } [ [AS] column_alias_identifier ]

[ ,...n ]

::=

{ DELETED | INSERTED | from_table_name } . { * | column_name }

| $ACTION

示例:在一条 SQL 语句中使用 WHERE 在一张表上执行 UPDATE 和 DELETE 操作

USE AdventureWorks;

GO

MERGE Production.ProductInventory AS pi

USING (SELECT ProductID, SUM(OrderQty) FROM Sales.SalesOrderDetail sod

JOIN Sales.SalesOrderHeader soh

ON sod.SalesOrderID = soh.SalesOrderID

AND soh.OrderDate = GETDATE()

GROUP BY ProductID) AS src (ProductID, OrderQty)

ON (pi.ProductID = src.ProductID)

WHEN MATCHED AND pi.Quantity - src.OrderQty 0

THEN UPDATE SET pi.Quantity = pi.Quantity - src.OrderQty

WHEN MATCHED AND pi.Quantity - src.OrderQty = 0

THEN DELETE;

这个示例是一个非常典型的销售定货库存问题。这个示例很简单,表达的意思就是:如果某一个产品产生了销售定单数据,则将其对应的产品库存除去该销售定单所产生的数量,如果当前库存数量与该销售定单数量相同,则从库存表中删除该产品的库存纪录。

我们看到,利用 MERGE 语句可以将复杂的 SQL 语句简化。它比起 IF、CASE 等更加灵活和强大。

结论

Microsoft SQL Server 2008 对事务性 SQL 语言做了一些增强,提高了查询效率。使得 SQL Server 成为大中型企业数据库的首先产品。SQL Server 2008 将伴随 Visual Studio 2008 一起发布,开发人员提前了解这些信息有助于在 SQL Server 的新版本发布后快速建立基于该版本的企业级应用程序。

【相关文章】

SQL Server 2008 -“Katmai”功能简介

微软新一代数据库SQL Server 2008明年初上市

Katmai改名SQL Server 2008

SQL Server 2005中的T-SQL

T-SQL实用例句

共3页: 3

【内容导航】


* 部分内容来源于网络,版权属原作者所有,转载请注明来源。
打印 | 收藏此页 |  推荐给好友 | 举报