Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 以标量值表示的用户定义函数返回语句_Sql_Sql Server_User Defined Functions - Fatal编程技术网

Sql 以标量值表示的用户定义函数返回语句

Sql 以标量值表示的用户定义函数返回语句,sql,sql-server,user-defined-functions,Sql,Sql Server,User Defined Functions,我有一个包含以下列的表: CREATE TABLE [dbo].[TblPerson]( [Id] [int] IDENTITY(1,1) NOT NULL, [name] [nvarchar](30) NULL, [Family] [nvarchar](40) NULL, [address] [nvarchar](200) NULL, [MeliCode] [char](10) NOT NULL, [IsActive] [bit] NULL CO

我有一个包含以下列的表:

CREATE TABLE [dbo].[TblPerson](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](30) NULL,
    [Family] [nvarchar](40) NULL,
    [address] [nvarchar](200) NULL,
    [MeliCode] [char](10) NOT NULL,
    [IsActive] [bit] NULL CONSTRAINT [DF_TblPerson_IsActive]  DEFAULT ((0)),
    [Count] [int] NULL CONSTRAINT [DF_TblPerson_Count]  DEFAULT ((0)),
 CONSTRAINT [PK_TblPerson] PRIMARY KEY CLUSTERED 
(
现在我想写一个UDF,它将Melicode作为输入参数,如果IsActive=1,则UDF返回count的值,否则UDF必须返回0。 我将以下函数编写为

CREATE FUNCTION ReturnMelli ( @Melicode CHAR(10) )
RETURNS INT
AS 
    BEGIN
        DECLARE @RESULT BIT
        SET @RESULT = ( SELECT  Isactive
                        FROM    TblPerson
                        WHERE   MeliCode = @Melicode
                      )
        DECLARE @R INT
        SET @R = ( SELECT   [Count]
                   FROM     TblPerson
                   WHERE    MeliCode = @Melicode
                 )
        IF ( @RESULT = 1 ) 
            BEGIN
                RETURN @R
            END
        ELSE 
            BEGIN
                RETURN 0
            END

    END
然后,在运行UDF时会出现问题

Msg 455, Level 16, State 2, Procedure ReturnMelli, Line 17
The last statement included within a function must be a return statement.
我不明白失败的原因。即使我把返回值放在最后,它也不起作用

像这样试试

CREATE FUNCTION ReturnMelli ( @Melicode CHAR(10) )
    RETURNS INT
    AS 
        BEGIN
            DECLARE @RESULT BIT
            SET @RESULT = ( SELECT  Isactive
                            FROM    TblPerson
                            WHERE   MeliCode = @Melicode
                          )
            DECLARE @R INT
            SET @R = ( SELECT   [Count]
                       FROM     TblPerson
                       WHERE    MeliCode = @Melicode
                     )
            IF ( @RESULT <> 1 ) 
                BEGIN
                    SET @R =0
                END
                   RETURN @R

        END
替换这个

    IF ( @RESULT = 1 ) 
        BEGIN
            RETURN @R
        END
    ELSE 
        BEGIN
            RETURN 0
        END
用这个

    RETURN IIF(@RESULT = 1, @R, 0)

删除ELSE并检查它是否工作,但我不明白为什么IF语句在逻辑上是错误的?您的语句在逻辑上不是错误的-因为错误消息说函数中包含的最后一条语句必须是return语句。在代码中,最后一条语句是END