【问题标题】:trying to get single column data with switch case statement尝试使用 switch case 语句获取单列数据
【发布时间】:2018-04-28 14:38:28
【问题描述】:
我正在尝试根据下面这样的角色查询表,但我收到这样的错误
“=”附近的语法不正确。
我不知道为什么会出现这个错误
下面是我的查询
CREATE procedure [dbo].[getName]
@AccountId int,
@role varchar(50),
@Activated_By nvarchar(100)
AS
BEGIN
SELECT Name
FROM pass_activationinfo
WHERE
CASE WHEN @role = 'Admin'
THEN account_id = @AccountId
ELSE Activated_By = @Activated_By
END
END
【问题讨论】:
标签:
sql-server
tsql
sql-server-2012
sql-server-2014
【解决方案1】:
第一个变种
SELECT Name
FROM pass_activationinfo
WHERE
(@role = 'Admin' AND account_id = @AccountId)
OR (@role <> 'Admin' AND Activated_By = @Activated_By)
第二个变种
SELECT Name
FROM pass_activationinfo
WHERE
CASE
WHEN @role = 'Admin' AND account_id = @AccountId THEN 1
WHEN @role <> 'Admin' AND Activated_By = @Activated_By THEN 1
ELSE 0
END = 1
【解决方案2】:
更改大小写并改用 OR
CREATE procedure [dbo].[getName]
@AccountId int,
@role varchar(50),
@Activated_By nvarchar(100)
AS
BEGIN
SELECT
Name
FROM pass_activationinfo
WHERE
(
@role = 'Admin'
AND
account_id = @AccountId
)
OR
(
@role <> 'Admin'
AND
Activated_By = @Activated_By
)
END
【解决方案3】:
你可以用这个
SELECT Name
FROM pass_activationinfo
WHERE
(( @role = 'Admin'
and account_id = @AccountId)
or Activated_By = @Activated_By)