venerdì 12 giugno 2015

Rinumerazione cespiti - script sql

Il seguente script rinumera tutti i cespiti presenti in archivio

DECLARE @Codice CHAR(5)  
DECLARE @Categoria CHAR(3)
DECLARE @cmd NVARCHAR(500)  
DECLARE @Conta INT
DECLARE @ContaA CHAR(5)

DECLARE Categoria CURSOR FOR  
  SELECT distinct CATEGORIA FROM CESPITI  
  ORDER BY CATEGORIA

OPEN Categoria 
FETCH NEXT FROM Categoria INTO @Categoria
WHILE @@FETCH_STATUS = 0 BEGIN  
    SET @Conta = 0

    SET @cmd = 'DECLARE Cespiti CURSOR FOR  ' + 
               '    SELECT CODICE FROM CESPITI  ' +  
               '    WHERE CATEGORIA=' + '''' + @Categoria + '''' +  
               '    ORDER BY CODICE';  
    EXEC (@cmd)  

    OPEN Cespiti  
    FETCH NEXT FROM Cespiti INTO @Codice  
    WHILE @@FETCH_STATUS = 0 BEGIN  
           SET @Conta = @Conta + 1           
           SET @ContaA = Right('00000'+RTrim(LTrim(CAST(@Conta as CHAR(5)))),5)

           SET @cmd = 'UPDATE CESPITI SET CODICE=' + '''' + @ContaA + ''''+  ',' + 
                      ' CODPADRE=' + '''' + @ContaA + '''' + 
                      ' WHERE CATEGORIA=' + '''' + @Categoria + '''' +  
                      ' AND CODICE=' + '''' + @Codice + ''''
           EXEC (@cmd)  

           SET @cmd = 'UPDATE MOVCE SET CODCESPITE=' + '''' + @ContaA + ''''+  ',' + 
                      ' CODPADRE=' + '''' + @ContaA + '''' + 
                      ' WHERE CATEGORIA=' + '''' + @Categoria + '''' +  
                      ' AND CODCESPITE=' + '''' + @Codice + ''''
           EXEC (@cmd) 

           FETCH NEXT FROM Cespiti INTO @Codice  
    END  
    CLOSE Cespiti  
    DEALLOCATE Cespiti 

    -- Allinea il numeratore
    SET @Conta = @Conta + 1
    SET @ContaA = Right('00000'+RTrim(LTrim(CAST(@Conta as CHAR(5)))),5)
    SET @cmd = 'UPDATE NUCESP SET NUMEROCESP=' + '''' + @ContaA + '''' + 
                  ' WHERE CATEGORIA=' + '''' + @Categoria + ''''; 
    EXEC (@cmd) 


    FETCH NEXT FROM Categoria INTO @Categoria
end
CLOSE Categoria
DEALLOCATE Categoria