WEB开发网
开发学院数据库MSSQL Server T-SQL Enhancement in SQL Server 2005 - Part I 阅读

T-SQL Enhancement in SQL Server 2005 - Part I

 2008-12-06 10:15:56 来源:WEB开发网   
核心提示: 可能文字描述太过抽象,我们现在通过例子来进一步理解APPLY Operator,T-SQL Enhancement in SQL Server 2005 - Part I(2),下面的例子基于的Database是SQL Server 2005 的Sample Database:Advent

可能文字描述太过抽象,我们现在通过例子来进一步理解APPLY Operator。下面的例子基于的Database是SQL Server 2005 的Sample Database:AdventureWorks。(注:后续的例子如未作特殊的说明,均使用的是该Database)。

我们首先创建一个TVF:dbo.fn_getproduct。根据Product ID获得产品信息。

Production.WorkOrder作查询,并列出对应的Product的信息:

SELECT WorkOrderID,WorkOrder.ProductID,ProductNumber,[Name],OrderQty
FROM Production.WorkOrder WorkOrder
CROSS APPLY dbo.fn_getproduct(WorkOrder.ProductID)

下面是查询结果:

T-SQL Enhancement in SQL Server 2005 - Part I

我们可以看到ProductNumber和Name两个Column实际上是来自TVF中的,其余才是来自于Production.WorkOrder。如果把TVF看作一个Table,通过查询结果我们可以看出,上面的查询相当于把这个Table和Production.WorkOrder通过ProductID作了一个Join。到底是Inner Join,还是Outer Join?我们对这个TVF作如下修改,使其在正常的情况下返回一个空的结果集(WHERE ProductID = @product_id * -1):

IF EXISTS (SELECT * FROM sysobjects WHERE type = 'IF' AND name = 'fn_getproduct')
  BEGIN
    DROP Function dbo.fn_getproduct
  END
GO
CREATE Function dbo.fn_getproduct
(
  @product_id Int
)
RETURNS TABLE
AS RETURN
SELECT * FROM Production.Product WHERE ProductID = @product_id * -1
GO

上一页  1 2 3 4  下一页

Tags:SQL Enhancement in

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接