begin tran
 declare @i int 
  declare @sql varchar(max)
  declare @strsql varchar (max)
  set @i =1
  while @i <4
  begin
  select @sql=isnull(@sql+'+','')+'(case when exists(select 1 from dbo.RPT_resultA41 where '+name+' is null) then 0 else 1 end)'  
                 from sys.syscolumns
                    where id =OBJECT_ID('RPT_resultA41') and name like 'Mtd201%'
  set @strsql='update dbo.RPT_resultA41 set Ytd =(select  SUM(ISNULL(Mtd201204,0)+ISNULL(Mtd201205,0)+ISNULL(Mtd201206,0)
                                      +ISNULL(Mtd201207,0)+ISNULL(Mtd201208,0)+ISNULL(Mtd201209,0)
                                      +ISNULL(Mtd201210,0)+ISNULL(Mtd201211,0)+ISNULL(Mtd201212,0))
                                    from dbo.RPT_resultA41  
                                    where classify=-1 and CompanyID='+@i+')
                                    where classify=-1 and CompanyID='+@i
                                    
   print (@srtsql)
  set @i=@i+1   set @sql=''
  set @strsql=''   end
   
报错心须声明变量,昨天解决了个这样的问题,今天怎样都想不起来了,无脑了

解决方案 »

  1.   

    你的变量写错了 BEGIN TRAN 
     DECLARE @i INT 
     DECLARE @sql VARCHAR(MAX) 
     
     SET @i = 1 
     WHILE @i < 4 
        BEGIN
        --declare @strsql varchar (max) 
        DECLARE @strsql VARCHAR(MAX) =''
            SELECT  @sql = ISNULL(@sql + '+', '')
                    + '(case when exists(select 1 from dbo.RPT_resultA41 where '
                    + name + ' is null) then 0 else 1 end)'
            FROM    sys.syscolumns
            WHERE   id = OBJECT_ID('RPT_resultA41')
                    AND name LIKE 'Mtd201%'
            SET   @strsql = 'update dbo.RPT_resultA41 set Ytd =(select  SUM(ISNULL(Mtd201204,0)+ISNULL(Mtd201205,0)+ISNULL(Mtd201206,0) 
                                          +ISNULL(Mtd201207,0)+ISNULL(Mtd201208,0)+ISNULL(Mtd201209,0) 
                                          +ISNULL(Mtd201210,0)+ISNULL(Mtd201211,0)+ISNULL(Mtd201212,0)) 
                                        from dbo.RPT_resultA41   
                                        where classify=-1 and CompanyID=' + CONVERT(VARCHAR(10),@i )
                + ') 
                                        where classify=-1 and CompanyID=' + CONVERT(VARCHAR(10),@i )
                                          
            PRINT (@strsql)
            SET @i = @i + 1  
      
            SET @sql = ''
            SET @strsql = ''
      
        END
        
      

  2.   

     begin tran
     declare @i int 
      set @i =1
      while @i <4
      begin
        declare @strsql varchar (max)
    set @strsql=''
    declare @sql varchar(max)
    set @sql=''
      select @sql=isnull(@sql+'+','')+'(case when exists(select 1 from dbo.RPT_resultA41 where '+name+' is null) then 0 else 1 end)'  
                     from sys.syscolumns
                        where id =OBJECT_ID('RPT_resultA41') and name like 'Mtd201%'
      set @strsql='update dbo.RPT_resultA41 set Ytd =(select  SUM(ISNULL(Mtd201204,0)+ISNULL(Mtd201205,0)+ISNULL(Mtd201206,0)
                                          +ISNULL(Mtd201207,0)+ISNULL(Mtd201208,0)+ISNULL(Mtd201209,0)
                                          +ISNULL(Mtd201210,0)+ISNULL(Mtd201211,0)+ISNULL(Mtd201212,0))
                                        from dbo.RPT_resultA41  
                                        where classify=-1 and CompanyID='+ltrim(@i)+')
                                        where classify=-1 and CompanyID='+ltrim(@i)
                                        
       print (@strsql)
      set @i=@i+1   set @sql=''
      set @strsql=''   end
       
      

  3.   

    print (@srtsql) 中的变量写错了,
    应该是print @strsql 
      

  4.   

    还有就是链接@i的时候要把@i转换成varchar