【发布时间】:2014-07-30 03:34:37
【问题描述】:
对 SQL 编程相当陌生。
我正在尝试创建一个存储过程,它将获取用户名,将其与用户表进行比较以检索他们的“角色”,然后从反馈表中选择与他们相关的所有反馈。
目前有 3 个可能的值: - 用户 - 治理委员会 - 管理员
如果角色是“治理委员会”或“管理员”,我希望检索表中的所有条目 但是,如果角色是“用户”,我只想要 [publish] 列设置为 true 或“作者”或“IdentifiedBy”列设置为它们自己的条目。
这是我目前拥有的,但是它在 case 语句周围抛出错误
@Alias varchar(max),
AS
DECLARE @Role varchar(max)
SET @Role =
(
SELECT [Role] FROM [CSLL].[Users] WHERE [Alias] = @Alias
)
CASE
WHEN @Role = "Admin" THEN SELECT * FROM [CSLL].[Feedback]
WHEN @Role = "Governance Board" THEN SELECT * FROM [CSLL].[Feedback]
WHEN @Role = "User" THEN SELECT * FROM [CSLL].[Feedback] WHERE [Publish] = True OR [Author] = @Alias or [IdentifiedBy]=@Alias
ELSE
END
任何帮助将不胜感激。我敢肯定,这只是我正在做的一些愚蠢的事情,但对 SQL 来说是新手,我无法发现它。
提前致谢
汤姆
【问题讨论】:
-
CASE在 T-SQL 中是一个 表达式,它可以返回各种值之一 - 它是 NOT 一个流控制语句,就像在其他语言,它不能用于运行一段代码或另一段代码。为此,您需要专门使用IF和ELSE
标签: sql sql-server stored-procedures case