2009-06-11 1 views
0

У меня есть таблица пользователей со столбцамихранимой процедуры вопрос с IS_MEMBER

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

ID может быть идентификатор пользователя (в этом случае groupRank является NULL), домен группы с рангом (в этом случае grouprank не является нулевым) или зарезервированную группу по умолчанию, называемую #DefaultGroup.

мне нужна хранимая процедура, которая будет:

Если ID = SYSTEM_USER, возвратите, что определение

В противном случае - Еогеасп запись пользователей с GroupRank NOT NULL в порядке группы ранга, если IS_MEMBER (ID) = 1, что определение (если таковые имеются)

В противном случае - определение #DefaultGroup (если она есть)

В противном случае вернуть NULL.

Есть ли простой способ сделать это?

ответ

0

Это, кажется, работает как функция таблицы

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 
2

Если я правильно понять вас, вы могли бы использовать какой-то сазе, подобный приведенному ниже:

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] 
+0

Будет ли это разрешать случай, когда пользователь является членом нескольких групп? – WOPR