1
У меня есть эта хранимая процедураSQL Server хранимые процедуры sp_executesql
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',@[email protected],@[email protected];
случаи тестов:
Когда я запускаю его с
thingid
являетсяnull
иtypeid
являетсяnull
, я получаю все результаты, которые есть идеально.Когда
thingid
поставляется иtypeid
являетсяnull
, результаты хорошоВот где, результаты не очень хорошие:
thingid
являетсяnull
иtypeid
поставляется. Все возвращается.
Что мне не хватает?
Благодаря
imho, если thingid имеет значение null, а не typeid, у вас есть неверный запрос, который ищет 'select * from items и TypeID = @ typeid'. – tschmit007
Я этого не видел. благодаря – mpora