简单存储过程问题,结束立即结帖!!
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,这个存储过程用于查询,为何调试的时候总是停在上面的错误行呢? 另,如果在程序里直接调用它,会返回查询结果吗? 不行该怎么写呢?
问题点数:50、回复次数:4Top
1 楼vivianfdlpw()回复于 2005-07-15 17:51:13 得分 30
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)
Top
2 楼paoluo(一天到晚游泳的鱼)回复于 2005-07-15 17:52:42 得分 10
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)
GOTop
3 楼paoluo(一天到晚游泳的鱼)回复于 2005-07-15 17:54:01 得分 5
所有的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
Top
4 楼zlp321002(Life Is Good,Let's Shine)回复于 2005-07-15 18:55:43 得分 5
--同意楼上Top




