SQL Server: создание функций - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь применить некоторую логику к своему выбору, создав следующую функцию:

ALTER FUNCTION [dbo].[SelectemnExportObject]
    (@TITLE NVARCHAR(MAX)) 
RETURNS NVARCHAR(20) 
AS
BEGIN
    DECLARE @Str NVARCHAR(MAX) = ''
    DECLARE @Definition1 VARCHAR(MAX) = (SELECT DEFINITION1 
                                         FROM [dbo].test 
                                         WHERE title = @Title)

    DECLARE @Definition2 VARCHAR(MAX) = (SELECT DEFINITION2 
                                         FROM [dbo].test 
                                         WHERE title = @Title)
    DECLARE @Definition3 VARCHAR(MAX) = (SELECT DEFINITION3 
                                         FROM [dbo].test 
                                         WHERE title = @Title)

    IF @Definition1  <> '' 
       SET @str = @Definition1
    ELSE IF @Definition2  <> '' 
       SET @str = @str + '<br />' + @Definition2
    ELSE IF @Definition3  <> '' 
       SET @str = @str + '<br />' + @Definition3

    RETURN @Str
END

Правильно ли я сказал, что вызывать эту функцию как таковую?

select * 
from [dbo].[SelectemnExportObject]('absconding')

Я пытаюсь создать строку информации, ячейка 1 будет содержать @str, затем создаст еще одну с именем @ str2 и т. Д.

Нужно ли мне возвращать что-то еще, если я хочу это сделать?

Я благодарен за помощь и заранее извиняюсь, если пометка не верна

1 Ответ

0 голосов
/ 28 апреля 2018

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

select [dbo].[SelectemnExportObject]('absconding') AS [Str1]
      ,[dbo].[SelectemnExportObject]('abscondin2') AS [Str2]

Если функция возвращала таблицу (встроенную табличную функцию или многозначную функцию), вам нужно будет вызвать ее / выбрать из нее, как вы выбирали из таблицы.

select * from [dbo].[SelectemnExportObject]('absconding')

Редактировать

Чтобы ваша функция возвращала несколько значений, вам необходимо преобразовать эту функцию в табличную функцию с несколькими выражениями. Определение функции будет выглядеть примерно так ...

CREATE FUNCTION [dbo].[SelectemnExportObject] ( @TITLE NVARCHAR(MAX) ) 
RETURNS @Result TABLE
(Str1    NVARCHAR(MAX)         NOT NULL,
 Str2    NVARCHAR(MAX)         NOT NULL)
AS
BEGIN

    DECLARE @Str1 NVARCHAR(MAX) = '';
    DECLARE @Str2 NVARCHAR(MAX) = '';

/* Populate the values of @Str1 and @Str2 how ever you need to */

 INSERT INTO @Result (Str1 , Str2)
 VALUES (@Str1 , @Str2)

    RETURN;
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...