【发布时间】:2015-08-12 08:58:47
【问题描述】:
Create function getbyID ( @id int )
Returns table
as
return(
select * from Products where
ProductID=@id+10)
上面的函数返回所有产品 ID 大于 10 的产品记录。
当与下面的 CROSS APPLY 一起使用时
select o.* from [Order Details] o
CROSS APPLY getbyID(o.ProductID) P
我得到的结果是一些小于 10 的 productID,这是不可能的。
该示例使用随处可用的 NORTWIND 数据库示例。
ORDER DETAILS 表和 PRODCUTS 表由 ProductID 链接
Select* from getbyID (1) gives result below
当 UDF 被调用时(如上)结果显示一些 productID
你能看出错误在哪里吗?
【问题讨论】:
-
它完全有可能返回
Order Details行,其中ProductID小于 10。你在这里得到的是不会返回Order Details行的产品68 - 77. -
@Stephan 我想要的首先是 UDF 只返回 productID >= 10 。我检查了它工作正常。但是当与 cross apply 结合使用时,它会返回一些小于 10 的 productID。
-
@Damien 上面的代码应该返回与 productID >= 10 的内部连接相同的结果。这是我的目标
-
@JavaMain 我认为 Donal 的代码可能是您正在寻找的。span>
-
再读一遍UDF。它说“如果你给我一个 ID 值为 1,返回 ID 值为 11 的行”,这显然有效。你可能只是让你的逻辑倒退(即,如果你减去 10,那么它会说“如果你给我一个 ID 值为 1,返回 ID 值为 -9 的行”,这些行显然不存在)跨度>
标签: sql sql-server tsql inner-join udf