SQL Server:函数中包含的最后一条语句必须是返回语句

SQL Server:函数中包含的最后一条语句必须是返回语句,sql,sql-server,function,Sql,Sql Server,Function,我正在编写以下函数,根据传递给函数的参数检查表中的行,并返回数据类型位结果 以下是函数: create function dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30)) returns bit as begin if not exists (select 1 from Sample_table(nolock) where var1 = @var1 and var2 = 1) begin return

我正在编写以下函数,根据传递给函数的参数检查表中的行,并返回数据类型位结果

以下是函数:

create function dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30))
returns bit as  
begin 
    if not exists (select 1 from Sample_table(nolock) where var1 = @var1 and var2 = 1)
    begin
        return 0
    end

    if exists (select 1 from Sample_table(nolock) where var1 = @var1 and var2 = @var2)
    begin
        return 1
    end

    if exists (select 1 from Sample_table(nolock) where var1 = @var1 and var2 <> @var2)
    begin
        return 0
    end

end
go
但我得到了一个错误:

函数中包含的最后一条语句必须是return语句


请告诉我如何修理这个。提前谢谢

您没有为这种情况定义返回值:var1@var 1


我建议您使用标准类型编写函数,即:

CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> 
(
    -- Add the parameters for the function here
    <@Param1, sysname, @p1> <Data_Type_For_Param1, , int>
)
RETURNS <Function_Data_Type, ,int>
AS
BEGIN
    -- Declare the return variable here
    DECLARE <@ResultVar, sysname, @Result> <Function_Data_Type, ,int>

    -- Add the T-SQL statements to compute the return value here
    SELECT <@ResultVar, sysname, @Result> = <@Param1, sysname, @p1>

    -- Return the result of the function
    RETURN <@ResultVar, sysname, @Result>

END
GO
所以你的函数应该是这样的: 请注意,我颠倒了您支票的顺序

CREATE FUNCTION dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30))
RETURNS bit AS  
BEGIN 
    DECLARE @ResultVar bit = 0
    IF EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 <> @var2)
    BEGIN
        SELECT @ResultVar = 0
    END
    IF EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 = @var2)
    BEGIN
        SELECT @ResultVar = 1
    END
    IF NOT EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 = 1)
    BEGIN
        SELECT @ResultVar = 0
    END
    RETURN @ResultVar
END
GO
但您可以使用许多更好的方法,如:

CREATE FUNCTION dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30))
RETURNS bit AS  
BEGIN 
    DECLARE @ResultVar bit = 0
    SELECT @ResultVar = CASE 
                            WHEN var1 = @var1 AND var2 <> @var2 THEN 0
                            WHEN var1 = @var1 AND var2 = @var2 THEN 1
                            WHEN var1 = @var1 AND var2 = 1 THEN 0
                            ELSE @ResultVar
                        END
    RETURN @ResultVar
END
GO

如果所有if都失败了,它应该返回什么?
CREATE FUNCTION dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30))
RETURNS bit AS  
BEGIN 
    DECLARE @ResultVar bit = 0
    IF EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 <> @var2)
    BEGIN
        SELECT @ResultVar = 0
    END
    IF EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 = @var2)
    BEGIN
        SELECT @ResultVar = 1
    END
    IF NOT EXISTS(SELECT 1 FROM Sample_table(nolock) WHERE var1 = @var1 AND var2 = 1)
    BEGIN
        SELECT @ResultVar = 0
    END
    RETURN @ResultVar
END
GO
CREATE FUNCTION dbo.udf_my_func(@var1 varchar(15), @var2 varchar(30))
RETURNS bit AS  
BEGIN 
    DECLARE @ResultVar bit = 0
    SELECT @ResultVar = CASE 
                            WHEN var1 = @var1 AND var2 <> @var2 THEN 0
                            WHEN var1 = @var1 AND var2 = @var2 THEN 1
                            WHEN var1 = @var1 AND var2 = 1 THEN 0
                            ELSE @ResultVar
                        END
    RETURN @ResultVar
END
GO