Использование Like с и оператором в хранимой процедуре - PullRequest
0 голосов
/ 07 июля 2019

У меня проблема с работой над хранимой процедурой и стимулсофт при использовании оператора Like и оператора and. Пожалуйста, помогите мне. Когда я использую этот код, он возвращает пустую страницу в стимуле, но если я изменяю одно из условий на or, код возвращает все строки в таблице базы данных

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[reportedu2]
    @d1 NVARCHAR(50),
    @d2 NVARCHAR(50),
    @name NVARCHAR(50),
    @unit NVARCHAR(50),
    @semat NVARCHAR(50),
    @maghta NVARCHAR(50),
    @uni NVARCHAR(50),
    @field NVARCHAR(50)
AS
BEGIN
    SELECT * 
    FROM Tbledu
    WHERE (unit LIKE '%' + ISNULL(@unit, unit) + '%')
      AND (name LIKE '%' + ISNULL(@name, name) + '%')
      AND (dateend BETWEEN @d1 AND @d2)
      AND (semat LIKE '%' + ISNULL(@semat, semat) + '%')
      AND (maghta LIKE '%' + ISNULL(@maghta, maghta) + '%')
      AND (uni LIKE '%' + ISNULL(@uni, uni) + '%')
      AND (field LIKE '%' + ISNULL(@field, field) + '%')
END

1 Ответ

0 голосов
/ 07 июля 2019

Хороший способ отладить это - попробовать каждое условие отдельно и убедиться, что оно возвращает ожидаемые строки.

Если вы возвращаете все строки, наиболее вероятным является то, что одной из переменных является = '', а не ожидаемый ноль, так что, например, условие типа ...

(uni Like '%%')

, который, конечно, все вернет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...