COALESCE メソッドを使用すると、列に NULL 値がある場合に NULL 検索条件を渡す (つまり、検索条件を無視する) と、多くのデータベースで行が返されないという問題があります。
たとえば、SQL Server 2000 で次のコードを試してください。
CREATE TABLE dbo.Test_Coalesce (
my_id INT NOT NULL IDENTITY,
my_string VARCHAR(20) NULL )
GO
INSERT INTO dbo.Test_Coalesce (my_string) VALUES (NULL)
INSERT INTO dbo.Test_Coalesce (my_string) VALUES ('t')
INSERT INTO dbo.Test_Coalesce (my_string) VALUES ('x')
INSERT INTO dbo.Test_Coalesce (my_string) VALUES (NULL)
GO
DECLARE @my_string VARCHAR(20)
SET @my_string = NULL
SELECT * FROM dbo.Test_Coalesce WHERE my_string = COALESCE(@my_string, my_string)
GO
列 my_string が NULL である行では効果的に取得できるため、2 行しか返されません。
my_string = COALESCE(@my_string, my_string) =>
my_string = COALESCE(NULL, my_string) =>
my_string = my_string =>
NULL = NULL
しかしもちろん、NULL は NULL と同じではありません。
私は固執しようとします:
SELECT
my_id,
my_string
FROM
dbo.Test_Coalesce
WHERE
(@my_string IS NULL OR my_string = @my_string)
もちろん、それを調整して、ワイルドカードを使用したり、その他のやりたいことをしたりできます。