我建议你使用标准类型的编写函数是:
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