我有一张这样的表
CREATE TABLE [dbo].[TEST_FIND]
(
[UNIT1] [nvarchar](50) NULL,
[UNIT2] [nvarchar](50) NULL,
[UNIT3] [nvarchar](50) NULL,
[UNIT4] [nvarchar](50) NULL
) ON [PRIMARY]
,该表中的数据如下所示
UNIT1 | UNIT2 | UNIT3 | UNIT4
a | b | c | d
null | b | null | null
null | null | c | null
null | null | null | d
a | null | null | null
我的存储过程是:
CREATE PROCEDURE [dbo].[A_TEST]
@UNIT1 nvarchar(50) = NULL,
@UNIT2 nvarchar(50) = NULL,
@UNIT3 nvarchar(50) = NULL,
@UNIT4 nvarchar(50) = NULL
AS
BEGIN
SELECT
UNIT1, UNIT2, UNIT3, UNIT4
FROM
TEST_FIND
WHERE
@UNIT1 is null or UNIT1 like '%'+@UNIT1+ '%' AND
@UNIT2 is null or UNIT2 like '%'+@UNIT2+ '%' AND
@UNIT3 is null or UNIT3 like '%'+@UNIT3+ '%' AND
@UNIT4 is null or UNIT4 like '%'+@UNIT4+ '%'
END
问题是,当我这样称呼我的程序时:
exec A_TEST 'a', null, null, null
结果还可以(只需从表TEST_FIND显示,其中UNIT 1是'a')
但使用时
exec A_TEST null, 'b', null, null
结果是
select * from TEST_FIND
我不知道为什么,问题是什么
需要尽快解决这个问题,帮帮我
由于
答案 0 :(得分:1)
将WHERE
条款分组后会发生什么?像这样:
WHERE
( @UNIT1 is null or UNIT1 like '%'+@UNIT1+ '%' )
AND
( @UNIT2 is null or UNIT2 like '%'+@UNIT2+ '%' )
AND
( @UNIT3 is null or UNIT3 like '%'+@UNIT3+ '%' )
AND
( @UNIT4 is null or UNIT4 like '%'+@UNIT4+ '%' )
END
答案 1 :(得分:0)
在AND条件中使用括号。
CREATE PROCEDURE [dbo].[A_TEST]
@UNIT1 nvarchar(50) = NULL,
@UNIT2 nvarchar(50) = NULL,
@UNIT3 nvarchar(50) = NULL,
@UNIT4 nvarchar(50) = NULL
AS
BEGIN
SELECT
UNIT1,
UNIT2,
UNIT3,
UNIT4
FROM
TEST_FIND
WHERE
(@UNIT1 is null or UNIT1 like '%'+@UNIT1+ '%') AND
(@UNIT2 is null or UNIT2 like '%'+@UNIT2+ '%' )AND
(@UNIT3 is null or UNIT3 like '%'+@UNIT3+ '%')AND
(@UNIT4 is null or UNIT4 like '%'+@UNIT4+ '%')
END