sql-server – sqlmetal无法使用全文提取udf

错误信息:

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,也适用于使用此功能的任何人.

点赞