CREATE   procedure   UTC_duijiang_pro1
 (
    @firstDate varchar(20),
    @endDate   varchar(20) )   
  as   
  declare   @sqlstr   varchar(255)   
  if   exists   (select   *   from   sysobjects   where   id   =   object_id(N'[dbo].[UTC_duijiang _view1]')   and   OBJECTPROPERTY(id,   N'IsView')   =   1)   
                begin   
                select   @sqlstr   =   'drop   view   UTC_duijiang _view1'   
                exec(@sqlstr)   
                end   
    
  begin   
                select   @sqlStr =' create view UTC_duijiang_view1 as (select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT
                        from  Display_Acc_View as a
                        where Acctime between  '+@firstDate+' and  '+ @endDate+'  and flag != 3)'              exec(@sqlstr)   
  end
测试exec UTC_duijiang_pro1  '2002-2-12' , '2009-12-20'报错
Line 1: Incorrect syntax near 'TT'.

解决方案 »

  1.   


    @sqlstr 如果過長的話,用 Select @sqlstr=@sqlstr+''
    用Print(@sql)  看看你拼接的SQL語句是否正確.
      

  2.   

    select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                            from  Display_Acc_View as a 
                            where Acctime between  '+@firstDate+' and  '+ @endDate+'  and flag != 3 楼主在查询分析器里面测试一下上面的查询能否执行
      

  3.   

    CREATE  procedure  UTC_duijiang_pro1 

        @firstDate varchar(20), 
        @endDate  varchar(20) )  
      as  
    begin
      declare  @sqlstr  varchar(255)  
      if  exists  (select  *  from  sysobjects  where  id  =  object_id(N'[dbo].[UTC_duijiang _view1]')  and  OBJECTPROPERTY(id,  N'IsView')  =  1)  
                    begin  
                    select  @sqlstr  =  'drop  view  UTC_duijiang _view1'  
                    exec(@sqlstr)  
                    end  
        
      begin  
                    select  @sqlStr =' create view UTC_duijiang_view1 as (select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                            from  Display_Acc_View as a 
                            where Acctime between  '''+@firstDate+''' and  '''+ @endDate+'''  and flag != 3)' 
                  exec(@sqlstr)  
      end 
    end
    go--测试 exec UTC_duijiang_pro1  '2002-2-12' , '2009-12-20' 
      

  4.   

    try:
    CREATE  procedure  UTC_duijiang_pro1 

        @firstDate varchar(20), 
        @endDate  varchar(20) )  
      as  
      declare  @sqlstr  varchar(255)  
      if  exists  (select  *  from  sysobjects  where  id  =  object_id(N'[dbo].[UTC_duijiang _view1]')  and  OBJECTPROPERTY(id,  N'IsView')  =  1)  
                    begin  
                    select  @sqlstr  =  'drop  view  UTC_duijiang _view1'  
                    exec(@sqlstr)  
                    end  
        
      begin  
                    select  @sqlStr =' create view UTC_duijiang_view1 as select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                            from  Display_Acc_View as a 
                            where Acctime between  '''+@firstDate+''' and  '''+ @endDate+'''  and flag != 3' 
                   
                  exec(@sqlstr)  
      end 
      

  5.   

    CREATE  procedure  UTC_duijiang_pro1 

        @firstDate varchar(20), 
        @endDate  varchar(20) )  
      as  
    begin --加
      declare  @sqlstr  varchar(255)  
      if  exists  (select  *  from  sysobjects  where  id  =  object_id(N'[dbo].[UTC_duijiang _view1]')  and  OBJECTPROPERTY(id,  N'IsView')  =  1)  
                    begin  
                    select  @sqlstr  =  'drop  view  UTC_duijiang _view1'  
                    exec(@sqlstr)  
                    end  
        
      begin  
                    select  @sqlStr =' create view UTC_duijiang_view1 as (select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                            from  Display_Acc_View as a 
                            where Acctime between  '''+@firstDate+''' and  '''+ @endDate+'''  and flag != 3)' --单引号变为三个引号
                  exec(@sqlstr)  
      end 
    end --加
    go--测试 exec UTC_duijiang_pro1  '2002-2-12' , '2009-12-20' 
      

  6.   


    @sqlstr 长度不够被截断了
    把 
    declare  @sqlstr  varchar(255)  
    更改为
    declare  @sqlstr  varchar(max)  
    就可以了
      

  7.   


    更改之后alter  procedure  UTC_duijiang_pro1 

        @firstDate varchar(20), 
        @endDate  varchar(20) )  
    as  
    begin
      declare  @sqlstr  varchar(max)  
      if  exists  (select  1  from  sysobjects  where  id  =  object_id(N'[dbo].[UTC_duijiang _view1]')  and  OBJECTPROPERTY(id,  N'IsView')  =  1)  
        begin  
    select  @sqlstr  =  'drop  view  UTC_duijiang _view1'  
    exec(@sqlstr)  
        end      select  @sqlStr =' create view UTC_duijiang_view1 as (select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                from  Display_Acc_View as a 
                where Acctime between  '''+@firstDate+''' and  '''+ @endDate+'''  and flag != 3)' 
    exec(@sqlstr)  
    end
      

  8.   

    谢谢给位 3楼的运行也是失败 还是谢谢你select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                            from  Display_Acc_View这句执行可以出结果
      

  9.   


    alter  procedure  UTC_duijiang_pro1 

        @firstDate varchar(20), 
        @endDate  varchar(20) )  
    as  
    begin
      declare  @sqlstr  varchar(max)  
      if  exists  (select  1  from  sysobjects  where  id  =  object_id(N'[dbo].[UTC_duijiang _view1]')  and  OBJECTPROPERTY(id,  N'IsView')  =  1)  
        begin  
            select  @sqlstr  =  'drop  view  UTC_duijiang _view1'  
            exec(@sqlstr)  
        end      select  @sqlStr =' create view UTC_duijiang_view1 as (select a.CustCode,a.CustName,a.outloc,(a.塑料瓶盖数量+a.跨区盖数量) as PET,a.玻璃瓶盖数量 as RB,a.九盎司糖浆包数量 AS NB,a.十二盎司糖浆包数量 AS TB,a.九盎司糖浆桶数量 AS NT,a.十二盎司糖浆桶数量 AS TT 
                from  Display_Acc_View as a 
                where Acctime between  '''+@firstDate+''' and  '''+ @endDate+'''  and flag != 3)' 
        print(@sqlstr)  
    endexec UTC_duijiang_pro1  '2002-2-12' , '2009-12-20' 先看看你的sql語句,看是否有錯?
      

  10.   

    问题解决了 谢谢各位 
     尤其是 yangsnow_rain_wind  谢谢你