Я использую SQL Server 2008.
У меня есть интересный сценарий, когда хранимая процедура (написанная «опытным пользователем») имеет нормальное время выполнения (около 4 секунд), если есть данные восновной стол.Если значение поиска не существует, время выполнения в среднем составляет около 3 минут.Из-за того, как работает процесс и веб-приложение, которое использует процедуру, ему требуется пустой набор результатов в случае отсутствия данных.
Я проверил приведенную ниже логику со значениями, у которых есть данные, и со значениями, которых нет, и поток, кажется, работает;однако, когда я помещаю свой фактический запрос в оператор else, кажется, что эта часть всегда оценивается, несмотря на мое знание того, что логическая ветвь не должна выполняться.
DECLARE @spId int
SELECT @spId = td.mainId
FROM dbo.PRIMARYTABLE
WHERE td.longId = @searchVal
IF @spId < 1 OR @spId IS NULL
BEGIN
select 'RETURN EMPTY RESULT SET' as test
END
ELSE
BEGIN
SELECT 'DO ACTUAL QUERY' as test
END
Когда я проверяю это с фиктивным значениемнапример, 1111, выберите «RETURN EMPTY RESULT SET» в качестве теста.Когда я использую значение, которое, как я знаю, существует, в качестве теста возвращается SELECT 'DO ACTUAL QUERY'.Когда я заменяю «ВЫБРАТЬ« СДЕЛАТЬ АКТУАЛЬНЫЙ ЗАПРОС »как тест» фактическим усиленным запросом и использую то же несуществующее фиктивное значение, все равно выглядит, что предложение ELSE достигнуто.
Что мне здесь не хватает