CREATE procedure search_accident
@zqAddress varchar,@zqLevel varchar,@zqType varchar,@zqTime1 datetime,@zqTime2 datetime
as
Declare @strSQL varchar
set @strSQL = select * from BasicInfo where Num >0 //error!!!!!!!!!!!!!!!!!!!!!
if (@zqType!=null)
set @strSQL = @strSQL + and 灾种 like + %+@zqType+%
if (@zqTime1!=null)
set @strSQL = @strSQL + and 发生时间>+@zqTime1+
if (@zqTime2!=null)
set @strSQL = @strSQL + and 发生时间<+@zqTime2+
if (@zqLevel!=null)
set @strSQL = @strSQL + and 事故等级 like + %+@zqLevel+%
if (@zqAddress!=null)
set @strSQL = @strSQL + and 发生地点 like + %+@zqAddress+%
exec(@strSQL)
GO
各位大哥 小弟初学sp,这个存储过程用于查询,为何调试的时候总是停在上面的错误行呢? 另,如果在程序里直接调用它,会返回查询结果吗? 不行该怎么写呢?
Declare @strSQL varchar(2000)
set @strSQL = select * from BasicInfo where Num >0 //error!!!!!!!!!!!!!!!!!!!!!
if (@zqType is not null)
set @strSQL = @strSQL + and 灾种 like + %+@zqType+%
if (@zqTime1 is not null)
set @strSQL = @strSQL + and 发生时间>+@zqTime1+
if (@zqTime2 is not null)
set @strSQL = @strSQL + and 发生时间<+@zqTime2+
if (@zqLevel is not null)
set @strSQL = @strSQL + and 事故等级 like + %+@zqLevel+%
if (@zqAddress is not null)
set @strSQL = @strSQL + and 发生地点 like + %+@zqAddress+%
exec(@strSQL)
CREATE procedure search_accident
@zqAddress varchar(100),@zqLevel varchar(100),@zqType varchar(100),@zqTime1 datetime,@zqTime2 datetime
as
Declare @strSQL varchar(1000)
set @strSQL = select * from BasicInfo where Num >0 1=1
if (@zqType!=null)
set @strSQL = @strSQL + and 灾种 like + %+@zqType+%
if (@zqTime1!=null)
set @strSQL = @strSQL + and 发生时间>+@zqTime1+
if (@zqTime2!=null)
set @strSQL = @strSQL + and 发生时间<+@zqTime2+
if (@zqLevel!=null)
set @strSQL = @strSQL + and 事故等级 like + %+@zqLevel+%
if (@zqAddress!=null)
set @strSQL = @strSQL + and 发生地点 like + %+@zqAddress+%
exec(@strSQL)
GO
所有的varchar没有定义长度,会默认为1。
CREATE procedure search_accident
@zqAddress varchar(100),@zqLevel varchar(100),@zqType varchar(100),@zqTime1 datetime,@zqTime2 datetime
as
Declare @strSQL varchar(1000)
set @strSQL = select * from BasicInfo where Num >0
if (@zqType!=null)
set @strSQL = @strSQL + and 灾种 like + %+@zqType+%
if (@zqTime1!=null)
set @strSQL = @strSQL + and 发生时间>+@zqTime1+
if (@zqTime2!=null)
set @strSQL = @strSQL + and 发生时间<+@zqTime2+
if (@zqLevel!=null)
set @strSQL = @strSQL + and 事故等级 like + %+@zqLevel+%
if (@zqAddress!=null)
set @strSQL = @strSQL + and 发生地点 like + %+@zqAddress+%
exec(@strSQL)
GO
--同意楼上