【发布时间】:2013-08-06 06:29:55
【问题描述】:
我有以下 SQL 函数
ALTER FUNCTION FunctionTEST (@itemID bigint) RETURNS table AS RETURN
(
(SELECT top 1 Pic_Path from PictureDetails WHERE PictureDetails.Item_ID = @itemID)
)
如果根据指定的参数找到该函数,该函数将返回第一行。如果没有针对参数找到记录,我希望此函数返回空行。我认为这应该是一个简单的任务,但我不熟悉 SQL 函数。下面是我用来调用函数的实际查询。
SELECT
NewClientTB.FirstName, NewClientTB.LastName, NewClientTB.EMail, NewClientTB.ContactNo,
ADDetails.AD_ID, ADDetails.AD_EXactAddress,
ADDetails.AD_PostingTime, ADDetails.AD_Description, ADDetails.AD_Title,
ItemDetails.Item_ID, ItemDetails.Item_Price,
Regions.R_Description,
Cities.C_Name,
GCategories.GC_Description,
SCategories.SC_Description,
PictureDetails.Pic_Path
FROM NewClientTB, ADDetails,ItemDetails, Regions, Cities, GCategories,
SCategories, PictureDetails
WHERE FREETEXT (ADDetails.AD_Title, 'selling')
AND FREETEXT (ADDetails.AD_Description, 'selling')
AND ADDetails.AD_PosterID = NewClientTB.UserID
AND ADDetails.AD_ID = ItemDetails.AD_ID
AND Regions.R_ID = ADDetails.AD_Region
AND Cities.R_ID = ADDetails.AD_Region AND Cities.C_ID = ADDetails.AD_City
AND ItemDetails.Item_GCategory = GCategories.GC_ID
AND ItemDetails.Item_SCategory = SCategories.SC_ID AND ItemDetails.Item_GCategory =
SCategories.GC_ID
AND PictureDetails.Pic_Path = (select * from dbo.FunctionTEST(ADDetails.AD_ID))
【问题讨论】:
-
为什么要它返回一个空行?如所写,它返回一个没有行的表,这是有道理的。鉴于您最多只返回一个值,您确定要使用表值函数而不是标量函数吗?
-
我正在修改上面的问题,请过一分钟看看
-
空行是什么意思?所有列值都设置为空的行?这个函数返回一个空表,你可以把它当成“空行”,有意义
-
我的意思是如果项目 (@itemID) 存在但没有针对它的 Pic_Path,那么它应该返回空行,否则返回 Pic_Path 及其数据
-
@user2599269 。 . .您使用该功能的方式,它没有任何区别。如果有一行具有
NULL值或根本没有行,则比较将失败。
标签: sql database sql-server-2008