sql标量函数与表值函数

标量函数
CREATE function [dbo].[UserIDFromName](@UserName nvarchar(20),@UserPass nvarchar(64))
returns int
as
begin
    return (select UserID from UserInfo where UserName=@UserName and UserPass=@UserPass)
    
end;

调用:

create procedure [dbo].[GetUserRole] 
    @UserName nvarchar(20),
    @PassWord nvarchar(64),
    @FuncID int
AS
    set nocount on
 
    declare @UserID int
    set @UserID=Admin.dbo.UserIDFromName(@UserName,@PassWord)

    if @UserID is null
    begin
        select ret=1,msg='用户名或密码错误!'
        return -1
    end
    if not exists (select UserID from UserInfo where UserID=@UserID and IsActive=1)
    begin
        select ret=1,msg='该用户尚未激活,请联系管理员!'
        return -1
    end

    declare @isAdmin bit
    set @isAdmin=(select IsAdmin from UserInfo where UserName=@UserName)
    if @isAdmin=1
    begin
        if @FuncID is not null
            return 4
        else begin
            select ret=1,msg='权限不存在!'
            return -1
        end
    end

    if @FuncID is not null
    begin
        declare @role int
        set @role=(select role from UserRole where UserID=@UserID and FuncID=@FuncID)
        if @role is null 
            set @role=0
        return @role
    end 
    else begin
        select ret=1,msg='权限不存在!'
        return -1
    end

 表值函数:

CREATE FUNCTION [dbo].[Get_BindMaxMemberOrder](@dwRcvUserID as INT)
RETURNS TABLE
AS
    -- 绑定会员,(会员期限与切换时间)
    return (SELECT MAX(MemberOrder) as MaxmemberOrder,MAX(MemberOverDate) as MaxmemberOverDate
    FROM MemberInfo WHERE UserID=@dwRcvUserID)

调用:

-- 绑定会员,(会员期限与切换时间)
        SELECT @MaxMemberOrder=MaxMemberOrder,@MemberOverDate=MaxMemberOverDate
        FROM UserDB.dbo.Get_BindMaxMemberOrder(@dwRcvUserID)