7

私の質問は、これら 2 つの選択の機能を 1 つのステートメントで実行して、IF を取り除くことができるかということです。

DECLARE @recID INT;

--Case 1
SET @recID = null;
--Case 2
--SET @recID = 117;

IF @recID is null
BEGIN
    select * from myTable WHERE [myIDcolumn] is null    -- works when recID is null
END
ELSE
BEGIN
    select * from myTable WHERE [myIDcolumn] = @recID    -- works when recID is number
END
4

2 に答える 2

10

これはどうですか:

select *
from myTable
WHERE [myIDcolumn] = @recID or (@recID is null and [myIDcolumn] is null)

@recIDisの場合null、最初の部分は true にはなりませんが、2 番目の部分は if [myIDcolumn]isになり、ケースnullをカバーします。ではないnull場合、適切な場合に最初の部分が一致します (2 番目の部分は無視されます)。したがって、両方のケースがカバーされます。@recIDnull

于 2012-04-24T13:51:55.757 に答える
2

条件を少し異なる方法で表現できます。

  • @recIDとの両方[myIDcolumn]null、または
  • [myIDcolumn]に等しい必要があります@recID

    select * from myTable WHERE ([myIDcolumn] is null AND @recID is null) OR [myIDcolumn] = @recID

于 2012-04-24T13:52:17.830 に答える