1

私はこのストアドプロシージャを持っています

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;

テストケース:

  1. thingidisnulltypeidisで実行すると、null完璧な結果がすべて得られます。

  2. thingidが指定され、typeidがである場合null、結果は OKです。

  3. ここでは、結果が良くありません: thingidisnulltypeidis が提供されます。すべてが返されています。

私は何が欠けていますか?

ありがとう

4

1 に答える 1