如何在SQL Server 2008中创建和调用标量函数

47

我创建了一个标量函数,它成功创建了,但是当我使用select语句调用该函数时,它会显示无效对象,我修改了函数,收到消息“命令已成功完成”,但当我调用该函数时,我仍然得到同样的错误。以下是我尝试调用的函数:

ALTER FUNCTION [dbo].[fn_HomePageSlider]
(
    @PortalID int,
    @ArticleID int
)
RETURNS NVARCHAR(MAX)
AS
BEGIN
    DECLARE @HTML NVARCHAR(MAX)
    SET @HTML = '';
    Declare @Title varchar(1000)
    Select @Title= Title from CrossArticle_Article c where c.Id=@ArticleID
    Select @HTML = @HTML + '<div class="homeSlider">
                                <div class="text">'+ISNULL(c.Title,'')+'</div>
                            </div>'
    FROM CrossArticle_Article c INNER JOIN crossarticle_url U ON U.articleid=c.Id
    INNER JOIN FREETEXTTABLE(CrossArticle_Article,TITLE,@TITLE) as INDEX_TBL 
    ON INDEX_TBL.[KEY]=c.Id
    WHERE INDEX_TBL.RANK >= 75 AND 
    c.Id<>@ArticleID AND
    c.PortalId=@PortalID
    GROUP BY c.Title,U.url,INDEX_TBL.RANK
    ORDER BY INDEX_TBL.RANK DESC

    RETURN @HTML;
END

以下是我调用该函数的方式:

SELECT * FROM dbo.fn_HomePageSlider(9, 3025)

有人能告诉我上面的函数有什么问题吗?因为我得到了“命令已成功完成”的消息。

3个回答

92

如果你的函数是表值函数(Table Valued Function),那么你的调用方式是正确的。但由于此函数是标量函数(scalar function),你需要这样调用它:

SELECT dbo.fn_HomePageSlider(9, 3025) AS MyResult

如何在PHP中将此查询的结果存储到变量中?我的意思是$var = mssql_query(返回int值的函数)。我无法在$var内获取结果。它显示为“Resourceid#76”。@Akhil - Techy

5

尝试

SELECT dbo.function (parameters)

这个不起作用,至少对我来说是这样。去掉“* from”就会起作用。 - Al Lelopath
如何在PHP中将此查询的结果存储到变量中?我的意思是$var = mssql_query(返回int值的函数)。我无法在$var内获取结果。它显示为“Resourceid#76”。@Abbas - Techy

1

或者您可以直接使用PRINT命令代替SELECT命令。试试这个:

PRINT dbo.fn_HomePageSlider(9, 3025)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接