[英]Stored procedure question with IS_MEMBER
我有一个表用户有列
ID nvarchar(4000)
GroupRank int
Definition nvarchar(4000)
ID可以是用户ID(在这种情况下,groupRank为NULL),具有等级的域组(在这种情况下,grouprank不为空)或保留的默认组#DefaultGroup。
我需要一个存储过程,它将:
如果ID = SYSTEM_USER,则返回该定义
否则-如果IS_MEMBER(ID)= 1,则按组等级的顺序用GroupRank NOT NULL的Users中的foreach记录定义(如果有)
否则-#DefaultGroup定义(如果存在)
否则返回NULL。
是否有捷径可寻?
如果我对您的理解正确,则可以使用类似于以下内容的case语句:
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]
这似乎可以作为表函数
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.