日期:2014-05-18  浏览次数:20664 次

多条件and搜索过程为什么不通
CREATE   PROC     dbo.JdjcSearch
@Wzsz_Cpmc1   varchar(200),
@Wzsz_Sjqy1   varchar(200)
AS

Declare   @Sql   nvarchar(1024)
Set   @Sql   =   '   SELECT   Col001,   Col002,   Col014     FROM   Jdjc     where   (Col001   is   not   null)     '


IF   @Wzsz_Cpmc1   is   not     null
begin
Set   @Sql   =   @Sql+ '     and     '
Set   @Sql   =   @Sql   + '   Col002   LIKE     ' '% '+@Wzsz_Cpmc1+   '% ' ' '
END

IF   @Wzsz_Sjqy1   is   not   null
begin
Set   @Sql   =   @Sql+ '     and     '
Set   @Sql   =   @Sql   + '   Col014   LIKE     ' '% '+@Wzsz_Sjqy1+   '% ' ' '
END

EXEC     sp_executeSql     @Sql

WITH   RECOMPILE
GO

以上两个参数
@Wzsz_Cpmc1   varchar(200),
@Wzsz_Sjqy1   varchar(200)
当满足一个结果为空,必须要两个条件都满足才能搜索出内容。为什么?


------解决方案--------------------
CREATE PROC dbo.JdjcSearch
@Wzsz_Cpmc1 varchar(200),
@Wzsz_Sjqy1 varchar(200)
AS

Declare @Sql nvarchar(1024)
Set @Sql = ' SELECT Col001, Col002, Col014 FROM Jdjc where (Col001 is not null) '


IF IsNull(@Wzsz_Cpmc1, ' ') != ' ' --將 ' '的情況也加上
begin
Set @Sql = @Sql+ ' and '
Set @Sql = @Sql + ' Col002 LIKE ' '% '+@Wzsz_Cpmc1+ '% ' ' '
END

IF IsNull(@Wzsz_Sjqy1, ' ') != ' '
begin
Set @Sql = @Sql+ ' and '
Set @Sql = @Sql + ' Col014 LIKE ' '% '+@Wzsz_Sjqy1+ '% ' ' '
END

EXEC sp_executeSql @Sql

WITH RECOMPILE
GO

你傳入的時候,傳入一個空字符串就可以。