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