代码之家  ›  专栏  ›  技术社区  ›  WOPR

存储过程问题的成员是

  •  0
  • WOPR  · 技术社区  · 15 年前

    我有一个带列的表用户

    ID nvarchar(4000)
    GroupRank int
    Definition nvarchar(4000)
    

    ID可以是用户ID(在GroupRank为空的情况下)、具有等级的域组(在GroupRank不为空的情况下)或名为DefaultGroup的保留默认组。

    我需要一个存储过程,它将:

    如果id=system_user,返回该定义

    否则-group rank不为空的用户中的foreach记录(按组排名顺序排列),如果是\member(id)=1,则该定义(如果有)

    否则-默认组定义(如果有)

    否则返回空。

    有简单的方法吗?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jose Basilio    15 年前

    如果我对你的理解正确的话,你可能会使用类似于下面的案例陈述:

    SELECT
      ID,
      GroupRank,
      Definition = CASE
                    WHEN ID = SYSTEM_USER THEN Definition
                    WHEN GroupRank IS NOT NULL AND IS_MEMBER(ID) = 1 THEN Definition
                    WHEN ID = '#DefaultGroup' THEN Definition
                    ELSE NULL
                   END
    FROM
         [YourTable]
    
        2
  •  0
  •   WOPR    15 年前

    这似乎是一个表函数

    CREATE FUNCTION dbo.GetDefinition()
    RETURNS @definition TABLE 
    (
        Defn nvarchar(4000) NULL 
    )
    AS 
    BEGIN
        DECLARE @sys_usr nvarchar(4000);
        DECLARE @def_usr nvarchar(4000);
        SET @sys_usr = SYSTEM_USER;
        SET @def_usr = '#Default';
    
        IF(EXISTS(SELECT * FROM dbo.User WHERE ID = @sys_usr))
        BEGIN
            INSERT @definition SELECT Definition FROM User WHERE ID = @sys_usr
        END ELSE
        BEGIN
            IF(EXISTS(SELECT TOP 1 * FROM dbo.User WHERE IS_MEMBER(ID) = 1 AND GroupRank IS NOT NULL ORDER BY GroupRank))
            BEGIN
                INSERT @definition SELECT TOP 1 Definition FROM dbo.User 
                    WHERE IS_MEMBER(ID) = 1 AND GroupRank IS NOT NULL ORDER BY GroupRank
            END ELSE
            BEGIN
                IF(EXISTS(SELECT * FROM dbo.User WHERE ID = @def_usr))
                BEGIN
                    INSERT @definition SELECT Definition FROM User WHERE ID = @def_usr
                END
            END
        END
    
        RETURN;
    END