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

解决方案 »

  1.   


    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
      

  2.   

    你给它传的 @VIPID 是什么值?
      

  3.   


    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
      

  4.   

    你上面的
    if(len(@where)>0)
    set @SQL = 'select count(*) from DingDan where 1=1 '+@where--为什么执行了这步了
    如果@where=0呢?那不是没有语句执行了?当没有条件的时候只要执行语句不要where
      

  5.   


    --按楼主的可以这么改试试。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
      

  6.   


    --1楼改为这个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)set @SQL = 'select count(*) from DingDan where 1=1 '+@where--为什么执行了这步了
    exec(@SQL)--这里的@SQL还是为空没有值?
    end
      

  7.   

    create 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='+ltrim(@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
      

  8.   

    楼主的问题应该在于,没有对@where 变量进行判断Nullcreate 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='+convert(varchar(30),@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
      

  9.   

    修正:create 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'+@where--为什么执行了这步了
    exec(@SQL)--这里的@SQL还是为空没有值?
    end
    go
      

  10.   


    create proc DingDan_Get
    @startindex int,@pagesize int,@VIPID varchar(50),@ShopID int
    as
    begin
    declare @where varchar(1000),@SQl varchar(1000)
    set @where=' where 1=1 and'
    if(len(@VIPID)>0)
    set @where=@where+' VIP_ID='+@VIPID+' and'
    if(@ShopID>0)
    set @where=@where+' Shop_ID='+@ShopID+' and'
    if(len(@where)>0)
    Set @where=substring(@where,0,len(@where)-3)
    set @SQL = 'select top ('+@pagesize+') * from DingDan_View '+@where +'and D_ID NOT IN
    (
    select ('+@pagesize*@pagesize+') D_ID from DingDan '+@where +'order by D_ID desc
    ) order by D_ID desc'
    exec(@SQL)
    end
    go这个哪错了呢,调试到Set @SQL=XXX的时候出错了
      

  11.   

    看了下.你是类型没有弄正确的原因,sql拼接都是字符串!!!正确的如下,拷过去用吧:ALTER proc DingDan_Get 
    @startindex int,@pagesize int,@VIPID varchar(50),@ShopID INT
    as
    begin
    declare @where nvarchar(1000),@SQl varchar(1000)
    set @where=' where 1=1 and';
    if(len(@VIPID)>0)
    set @where=@where+' VIP_ID='+@VIPID+' and'
    if(@ShopID>0)
    set @where=@where+' Shop_ID='+CONVERT(NVARCHAR(10),@ShopID)+' and'
    if(len(@where)>0)
    Set @where=substring(@where,0,len(@where)-3)
    set @SQL = 'select top ('+CONVERT(NVARCHAR(10), @pagesize)+') * from DingDan_View '+@where +'and D_ID NOT IN
    (
        select ('+CONVERT(NVARCHAR(10),@pagesize*@pagesize)+') D_ID from DingDan '+@where +'order by D_ID desc
    ) order by D_ID desc'
    exec(@SQL)
    end
    go-----散分了.......