我对SQL相当缺乏经验。我正在使用 SQL Server 2012。
基本上,我希望根据传递给存储过程的某些参数的值来调整 SQL SELECT 语句的 WHERE 子句。
我还将将此 SELECT 的结果与存储过程中的另一个 SELECT 语句联合起来。
到目前为止的结构如下:
CREATE PROCEDURE dbo.procMyProcedure
@Param1 smallint = null
, @Param2 int = null
, ...
AS ...
--I have three separate SELECT statements, each catering for a specific scenario
SELECT ...
FROM ...
WHERE
(ER.EMR_Number = ISNULL(@Param1, ER.EMR_Number)) AND
(EE.EME_Number = ISNULL(@Param2, EE.EME_Number))
SELECT ...
FROM ...
WHERE
(EE.EME_Number = ISNULL(@Param2, EE.EME_Number))
SELECT ...
FROM ...
WHERE
(ER.EMR_Number = ISNULL(@Param1, ER.EMR_Number))
除了 WHERE 子句之外,这些语句是相同的。在我的场景中,第一条语句正好返回 1 个结果。第二个返回 119 个结果。第三个返回 3 个结果。
我不想运行所有三个语句。我想将它们合并到一个语句中,该单个语句返回与上述三个语句相同的结果,具体取决于传递的(可选)参数的值。
我可以通过将 SELECT 包装在嵌套的 IF ... ELSE IF 结构中来做到这一点,但是我不能使用 UNION。以下结构不起作用:
IF ...
SELECT ...
ELSE IF ...
SELECT ...
ELSE IF ...
SELECT ...
UNION
SELECT ...
必须有一种方法可以将这些合并到单个 SELECT 语句中,这样我就可以将它用作 UNION 语句的一部分。
我想了解以下内容:
SELECT ... --This select
UNION
SELECT ... --Other stuff
我真的很感激这方面的任何帮助。
问候,
亚当。