我是从头开始创建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块,但是它会不时更改..因此,我希望能够根据需要简单地更新功能,而不是每次查询
答案 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-您可以返回带有函数的整个表。