为计算列创建SQL函数

时间:2019-06-04 17:14:13

标签: sql function

我是从头开始创建SQL函数的新手。基本上,我想创建一个SQL函数,该函数将返回选择语句的此计算列

-编辑- 我认为我的第一个示例过于简单,我希望调用其他函数,并在此新函数中使用OUTER APPLY(不确定是否可以。)。这是我尝试将本专栏的select语句转换为函数的实际代码

Select 
s.[dbname] + '_' +[Tag2]
    + CASE WHEN [Tag3]='' 
            or tableA.[ignoreTag] is not null
            or isnumeric([Tag3])=1 
            or len([Tag3])=1 
            or isnumeric(left([Tag3],1))=1
        THEN ''
        ELSE '_'+[SomeDB].dbo.[RemoveNumericCharacters] ([tag3])
        END
    + CASE WHEN [tag4]='' 
            or tableB.[ignoreTag] is not null
            or isnumeric([tag4])=1 
            or len([tag4])=1 
            or isnumeric(left([Tag4],1))=1
        THEN ''
        ELSE '_'+[SomeDB].dbo.[RemoveNumericCharacters] ([tag4])
        END    as [Lookup]


FROM [SomeDB].[dbo].[mainTable] s 

outer apply (
    Select Top 1 * From [SomeDB].dbo.[LookupUseIgnoreTags] tableA
    Where s.[tag3] = tableA.[ignoretag]
    ) tableA

outer apply (
    Select Top 1 * From [SomeDB].dbo.[LookupUseIgnoreTags] tableB
    Where s.[tag4] = tableB.[ignoretag]
    ) tableB

用作...

Select
    [item1]
   ,[item2]
   ,[someDB].[dbo].[CalcColumnFunction]
FROM [someDB].dbo.[maintable]

-编辑-

该函数将包含更多的大小写和联接(以上只是一般性的想法),我希望它是可变的。目前,我在大约20个查询中使用CASE块,但是它会不时更改..因此,我希望能够根据需要简单地更新功能,而不是每次查询

1 个答案:

答案 0 :(得分:1)

下面的函数只是一个示例,它返回1值。

CREATE FUNCTION dbo.createfunction
(@Item VARCHAR(100))
RETURNS VARCHAR(100)
AS
BEGIN
   DECLARE @ItemValue VARCHAR(500) = NULL;    
   SET @ItemValue =  CASE  WHEN @Item='something' or @Item is not null THEN 'result1'  
                              WHEN @Item IN ('a','b') THEN 'result2'
                        ELSE 'otherResult' END
   RETURN @ItemValue;
END

我认为在您的情况下,您最好返回带有功能的整个表。请参见this-您可以返回带有函数的整个表。