在存储过程中使用Like和and运算符

时间:2019-07-07 16:58:57

标签: sql-server stored-procedures

使用Like运算符和and运算符时,在存储过程和stimulsoft上工作时遇到问题。请帮我。当我使用此代码时,它将在stimul中返回空白页,但是如果我将条件之一更改为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 :(得分:0)

调试此问题的一种好方法是自己尝试每个条件,并确保它返回您期望的行。

如果要取回所有行,则最有可能的事情是其中一个变量是=”,而不是期望的null,因此类似条件是,例如...

(uni Like '%%')

哪个当然会返回所有内容。