SQL Server:创建函数

时间:2018-04-27 20:58:30

标签: sql-server tsql

我试图通过创建以下函数将一些逻辑应用于我的选择:

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 :(得分:3)

因为函数返回标量值,所以它是一个标量函数,你会称之为:

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

如果函数返回一个表(内联表值函数或多语句值函数),那么当你从表中选择时,你需要从中调用它/ select。

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