错误信息:
Warning : SQM1014: Unable to extract function 'dbo.ProductFamilyIndex_EN' from SqlServer. Null or empty full-text predicate.
功能定义为:
CREATE FUNCTION [dbo].[ProductFamilyIndex_EN]
(
@topn int,
@keywords nvarchar(4000)
)
RETURNS TABLE
AS
RETURN
(
select top (@topn) ProductFamilyID
from (
select pf.ProductFamilyID, t.[RANK] as _rank
from containstable(ProductFamily, (Name_EN), @keywords, LANGUAGE 'English', @topn) t
inner join ProductFamily pf on(pf.ProductFamilyID=t.[KEY])
union all
select p.ProductID as ProductFamilyID, t.[RANK] as _rank
from containstable(Product, (LongDescription_EN, ShortDescription_EN), @keywords, LANGUAGE 'English', @topn) t
inner join Product p on(p.ProductID=t.[KEY] and p.ProductFamilyID is null and p.Deleted is null)
) t
group by ProductFamilyID
order by max(_rank) desc
)
不要被内部联盟弄糊涂 – 这只意味着没有家庭的产品本身就是一个家庭.
试图给参数赋予默认值:
@topn int = 1000,
@keywords nvarchar(4000) = 'test'
结果相同.
使用.NET 3.5和sql2008.
最佳答案 正如您所提到的,SQLMetal需要返回类型.
解决此问题的另一种方法是在存储过程中明确设置默认值:
SET @topn = COALESCE(@topn,1000)
在SELECT语句之前抛出它以确保任何NULL参数将返回有效值.
这不仅适用于SQLMetal,也适用于使用此功能的任何人.