Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server:如何使用if-else语句从同一个表中选择不同的数据_Sql_Sql Server_If Statement - Fatal编程技术网

SQL Server:如何使用if-else语句从同一个表中选择不同的数据

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

我正在使用下面的存储过程从一个表中选择数据,到目前为止,该表运行良好

现在,我想创建两个不同的案例,而不重复整个查询: 如果输入@selection=“active”,则选择不等于statusX=“Published”的所有内容,否则选择等于statusX=“Published”的所有内容

有谁能告诉我如何在这里做到这一点

我的存储过程(减少的列):

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