T-SQL Enhancement in SQL Server 2005 - Part I
2008-12-06 10:15:56 来源:WEB开发网可能文字描述太过抽象,我们现在通过例子来进一步理解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)
下面是查询结果:
我们可以看到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
Tags:SQL Enhancement in
编辑录入:爽爽 [复制链接] [打 印]- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接