SQL Server:如何使用if-else语句从同一个表中选择不同的数据
我正在使用下面的存储过程从一个表中选择数据,到目前为止,该表运行良好 现在,我想创建两个不同的案例,而不重复整个查询: 如果输入@selection=“active”,则选择不等于statusX=“Published”的所有内容,否则选择等于statusX=“Published”的所有内容 有谁能告诉我如何在这里做到这一点 我的存储过程(减少的列):SQL Server:如何使用if-else语句从同一个表中选择不同的数据,sql,sql-server,if-statement,Sql,Sql Server,If Statement,我正在使用下面的存储过程从一个表中选择数据,到目前为止,该表运行良好 现在,我想创建两个不同的案例,而不重复整个查询: 如果输入@selection=“active”,则选择不等于statusX=“Published”的所有内容,否则选择等于statusX=“Published”的所有内容 有谁能告诉我如何在这里做到这一点 我的存储过程(减少的列): ALTER PROCEDURE [dbo].[FetchRequests] @selection nvarchar(20) AS BEGI
ALTER PROCEDURE [dbo].[FetchRequests]
@selection nvarchar(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = 'active'
ORDER BY logID desc
FOR XML PATH('cols'), ELEMENTS, TYPE, ROOT('ranks')
END
非常感谢你在这方面的帮助,蒂姆。怎么样
where
(@selection = 'active' and statusX != 'Published')
or
(@selection != 'active' and statusX = 'Published')
你可以试试类似的东西
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = 'active'
AND (
(@selection = "active" AND statusX <> "Published")
OR (@selection <> "active" AND statusX = "Published")
)
ORDER BY logID desc
FOR XML PATH('cols'), ELEMENTS, TYPE, ROOT('ranks')
选择col1,
col2,
col3,
col4,
col5,
statusX,
日志状态,
罗吉德
从日志请求
其中logStatus='active'
及(
(@selection=“active”和statusX“Published”)
或(@selection“active”和statusX=“Published”)
)
按logID desc订购
对于XML路径('cols')、元素、类型、根('ranks'))
您可以只使用条件WHERE子句:
ALTER过程[dbo].[FetchRequests]
@选择nvarchar(20)
作为
开始
不计数;
选择col1,
col2,
col3,
col4,
col5,
statusX,
日志状态,
罗吉德
从日志请求
其中logStatus='active'
和((statusX'Published'和@selection='active')
或(状态X=‘已发布’和@selection‘活动’)
按logID desc订购
对于XML路径('cols')、元素、类型、根('ranks'))
结束
在您的中添加和子句,其中
:
AND (@selection = 'active') = (StatusX <> 'Published')
和(@selection='active')=(StatusX'Published')
(我看这是其他海报提出的两行字的组合。嗯,我想是品味的问题:)alterprocedure[dbo].[FetchRequests]
@选择nvarchar(20)
作为
开始
将@query声明为nvarchar(4000)
@质疑=
"不算,;
选择col1,
col2,
col3,
col4,
col5,
statusX,
日志状态,
罗吉德
从日志请求
其中logStatus=''活动''和statusX'+
当@selection='active'时选择case,然后选择“”
其他'='
结束+''已发布''
按logID desc订购
对于XML路径(“cols”)、元素、类型、根(“秩”)
执行@query
结束
AND (@selection = 'active') = (StatusX <> 'Published')
ALTER PROCEDURE [dbo].[FetchRequests]
@selection nvarchar(20)
AS
BEGIN
Declare @query as nvarchar(4000)
@query=
'SET NOCOUNT ON;
SELECT col1,
col2,
col3,
col4,
col5,
statusX,
logStatus,
logID
FROM LogRequests
WHERE logStatus = ''active'' and statusX ' +
Select case when @selection = 'active' then '<>'
else '='
END + '''Published''
ORDER BY logID desc
FOR XML PATH(''cols''), ELEMENTS, TYPE, ROOT(''ranks'')'
execute @query
END