Как создать и вызвать скалярную функцию в SQL Server 2008 - PullRequest
46 голосов
/ 23 декабря 2011

Я создал Scalar Functions, он был создан успешно, но когда я вызываю функцию с помощью оператора 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 ]

90 голосов
/ 23 декабря 2011

Ваш вызов работает, если бы это была табличная функция. Поскольку это скалярная функция, вы должны вызывать ее следующим образом:

SELECT dbo.fn_HomePageSlider(9, 3025) AS MyResult
5 голосов
/ 23 мая 2014

Попробуйте

SELECT dbo.function (parameters)
1 голос
/ 17 октября 2018

Или вы можете просто использовать команду PRINT вместо команды SELECT. Попробуйте это,

PRINT dbo.fn_HomePageSlider(9, 3025)
...