不太明白LZ为什么要这样做,不过应该可以用这样的存储过程解决:
create procedure EQCheckPlanQuery
(
@Plan_Date datetime,
@EQContent varchar(50),
@Check_Date datetime,
@Principal int
)
asdeclare @Sql nvarchar(200)
set @Sql = 'select * from EQCheckPlan where 1 = 1'if @Plan_Date is not null
begin
set @Sql = ' and Plan_Date = @Plan_Date'
endif @EQContent is not null
begin
set @Sql = ' and EQContent = @Plan_Date'
endif @Check_Date is not null
begin
set @Sql = ' and Check_Date = @Plan_Date'
endif @Principal is not null
begin
set @Sql = ' and Principal = @Plan_Date'
endexecute sp_executeSQL @Sql
create procedure EQCheckPlanQuery
(
@Plan_Date datetime,
@EQContent varchar(50),
@Check_Date datetime,
@Principal int
)
asdeclare @Sql nvarchar(200)
set @Sql = 'select * from EQCheckPlan where 1 = 1'if @Plan_Date is not null
begin
set @Sql = ' and Plan_Date = @Plan_Date'
endif @EQContent is not null
begin
set @Sql = ' and EQContent = @Plan_Date'
endif @Check_Date is not null
begin
set @Sql = ' and Check_Date = @Plan_Date'
endif @Principal is not null
begin
set @Sql = ' and Principal = @Plan_Date'
endexecute sp_executeSQL @Sql
where
(Plan_Date is null or Plan_Date=@Plan_Date)
and
EQContent is null or EQContent =@EQContent )
and
(Check_Date is null or Check_Date =@Check_Date )
and
(Principal is null or Principal=@Principal)
写法不妥,当不以某列为条件时,并不代表筛选该列为空的行.
例如 Plan_Date is null or Plan_Date=@Plan_Date 这里可能写为 @Plan_Date is null or Plan_Date=@Plan_Date 才符合你的意思,不过是没有这样的语法的。