首页 > 解决方案 > 如何根据存储过程中的 if else 条件将部分附加到查询

问题描述

我必须实现的是将字符串附加到现有变量中,例如:

string abc = "good";
abc += "afternoon";

这样最终的输出将是“下午好”

我编写了以下存储过程:

CREATE OR ALTER PROCEDURE [dbo].[sp_getPropertyContactUsDetails]
    (@isDeleted CHAR(1), 
     @cName VARCHAR(MAX)) 
AS
BEGIN
    SET NOCOUNT ON;
    --DECLARE @mainQ varchar(max)

    SELECT 
        pcd.col1, pcd.col2,.....
        CASE
           WHEN pcd.col1 = 'abc'
              THEN (SELECT pname FROM tbl_pd1 WHERE id = pcd.id)
           WHEN pcd.col2 = 'def'
              THEN (SELECT pname FROM tbl_pd2 WHERE id = pcd.id)
        END AS 'pname',
    FROM  
        tbl_pcd pcd 
    WHERE 
        pcd.isDeleted = @isDeleted

现在我想根据 if else 条件将一部分附加到查询中,如下所示:

IF @cName IS NOT NULL
THEN 

将以下部分附加到选择查询:

ORDER BY ID DESC 

IF @cName IS NULL 则不要附加该部分!

我尝试将参数声明为:

DECLARE @mainQ VARCHAR(MAX)

然后我正在做类似的事情:

SET @mainQ = 'The select statement as specified above in the stored procedure'

然后附加部分:

IF @cName IS NOT NULL
    SET @mainQ = @mainQ + ' ORDER BY ID DESC'

END (END statement of stored procedure)

任何人都可以帮助我解决以下情况,如何根据 if else 条件将部分附加到原始查询?

请注意,存储过程可能包含多个 if 语句!

标签: sqlsql-serverstored-procedures

解决方案


如果您只想添加到 order by 子句,那么您可以使用类似 -

ORDER BY
  CASE WHEN @cName IS NOT NULL 
  THEN ID 
  END DESC

推荐阅读