私はこのストアドプロシージャを持っています
USE [all_things]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[sp_getThingsByType]
@thingid int,
@typeid int
AS
DECLARE @Sql NVARCHAR(MAX) = 'SELECT * from items'
IF @thingid IS NOT NULL
BEGIN
SET @Sql += ' where thingid = @thingid'
END
IF @typeid IS NOT NULL
BEGIN
SET @Sql += ' and TypeID = @typeid'
END
EXEC sp_executesql @sql, N'@thingid int,@typeid int',@thingid=@thingid,@typeid=@typeid;
テストケース:
thingid
isnull
とtypeid
isで実行すると、null
完璧な結果がすべて得られます。thingid
が指定され、typeid
がである場合null
、結果は OKです。ここでは、結果が良くありません:
thingid
isnull
とtypeid
is が提供されます。すべてが返されています。
私は何が欠けていますか?
ありがとう