我有一个包含列
的用户表ID nvarchar(4000)
GroupRank int
Definition nvarchar(4000)
ID可以是userid(在这种情况下groupRank为NULL),具有排名的域组(在这种情况下grouprank不为null)或保留的默认组称为#DefaultGroup。
我需要一个存储过程:
如果ID = SYSTEM_USER,则返回该定义
否则 - 如果IS_MEMBER(ID)= 1,那么具有GroupRank的用户的foreach记录按组排名为NOT NULL,该定义(如果有的话)
否则 - #DefaultGroup定义(如果它在那里)
否则返回NULL。
有一种简单的方法吗?
答案 0 :(得分: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]
答案 1 :(得分: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