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

存储过程调试时变量为空,高手进来下
SQL code

ALTER proc DingDan_GetCount
@VIPID varchar(50),@ShopID int
as
begin
declare @where varchar(1000),@SQl varchar(1000)
if(len(@VIPID)>0)
set @where=' VIP_ID='+@VIPID+' and'
if(@ShopID>0)
set @where=@where+' Shop_ID='+@ShopID+' and'
if(len(@where)>0)
Set @where=' where '+substring(@where,0,len(@where)-3)
set @SQL = 'select count(*) from DingDan'+@where--为什么执行了这步了
exec(@SQL)--这里的@SQL还是为空没有值?
end



------解决方案--------------------
SQL code

ALTER proc DingDan_GetCount
@VIPID varchar(50),@ShopID int
as
begin
declare @where varchar(1000),@SQl varchar(1000)
if(len(@VIPID)>0)
set @where=' and VIP_ID='+@VIPID
if(@ShopID is not null)
set @where=' and Shop_ID='+ltrim(@ShopID)
if(len(@where)>0)
set @SQL = 'select count(*) from DingDan where 1=1 '+@where--为什么执行了这步了
exec(@SQL)--这里的@SQL还是为空没有值?
end

------解决方案--------------------
SQL code

ALTER proc DingDan_GetCount
@VIPID varchar(50),@ShopID int
as
begin
declare @where varchar(1000),@SQl varchar(1000)
if(len(@VIPID)>0)
set @where=' VIP_ID='+@VIPID+' and'
if(@ShopID>0)
set @where=@where+' Shop_ID='+@ShopID+' and'
/*
1、@where如果没有值,即NULL那么这个set后@where依旧是NULL,即时@ShopID有值。
2、拼字符串时注意数据类型,@ShopId是int型。
*/
if(len(@where)>0)
Set @where=' where '+substring(@where,0,len(@where)-3)
set @SQL = 'select count(*) from DingDan'+@where--为什么执行了这步了
exec(@SQL)--这里的@SQL还是为空没有值?
end

------解决方案--------------------
SQL code

--按楼主的可以这么改试试。

ALTER proc DingDan_GetCount
@VIPID varchar(50),@ShopID int
as
begin
declare @where varchar(1000),@SQl varchar(1000)
if(len(@VIPID)>0)
set @where=' VIP_ID='+@VIPID+' and '
if(@ShopID>0)
set @where=isnull(@where,'')+' Shop_ID='+ltrim(@ShopID)+' and'
if(len(@where)>0)
Set @where=' where '+substring(@where,0,len(@where)-3)
set @SQL = 'select count(*) from DingDan '+isnull(@where,'')--为什么执行了这步了
exec(@SQL)--这里的@SQL还是为空没有值?
end