我试图在RETURN
语句之前创建一个带有条件计算的函数,但是SSMS指出'BEGIN IF @param2 IS NULL'
附近有不正确的语法,我无法弄清楚这段代码有什么问题:
CREATE FUNCTION ConditionalFunction
(
@input1 VARCHAR(20),
@input2 VARCHAR(20)
)
RETURNS TABLE
AS BEGIN
IF @input2 IS NULL
BEGIN
SET @input2 = field
FROM table1
WHERE filter = @input1
END
RETURN
(
SELECT field1, field2
FROM table2
WHERE filter1 = @input1
AND filter2 = @input2
)
END
我的目标是能够调用它
ConditionalFunction('Foo',NULL)
或
ConditionalFunction('Foo','Bar')
第一个调用将使它基于@input2
检测@input1
的默认值。
我基于this answer编写了此代码。
这是SQL Server13。能否请我告诉我是否有什么办法可以使其编译?
N.B:我显然用通用名称替换了实名,但是代码结构保持不变
答案 0 :(得分:2)
尝试一下,但是将@Data
表类型更改为您的数据类型:
CREATE FUNCTION ConditionalFunction
(
@input1 VARCHAR(20),
@input2 VARCHAR(20)
)
RETURNS @Data TABLE
(
field1 VARCHAR(12)
,field2 VARCHAR(12)
)
AS
BEGIN
IF @input2 IS NULL
BEGIN
SET @input2 = field
FROM table1
WHERE filter = @input1
END
INSERT INTO @Data
SELECT field1, field2
FROM table2
WHERE filter1 = @input1
AND filter2 = @input2
RETURN;
END
SQL中有几种类型的函数:
您的语法看起来像您需要一个内联函数,但应只包含一个返回数据的SELECT
语句。因此,您需要创建一个表值函数。