SQL - SERVER - PROCEDURES

Click em Linguagem para conhecer melhor a sintaxe dos comandos

----------------------------------------------------------------
-- Dt Criação   : 05/11/2012
-- FUNCAO       : ATUALIZA LIMITE DE CREDITO 
-- AUTOR        :
----------------------------------------------------------------
-- EXEC AtualizaLimite '13883996003945','2010-08-13'
--
use cartao1
SET NOCOUNT ON
-- exclui a procedures caso ela já exista
IF EXISTS ( select NAME from SYSOBJECTS
           where NAME = 'AtualizaLimite' AND TYPE = 'P')
        DROP PROCEDURE AtualizaLimite
GO
-- cria procedure
CREATE PROCEDURE AtualizaLimite
    (
        -- cnpj do emissor      - '05881791000120'    
        @CNPJ_ADM                   varchar(14),    
        -- data do fechamento   - '2010-05-20' (inclusive)
        @DTFECHAMENTO               varchar(10)     
    )
AS
-- declara variaves usasas na procedure
DECLARE
        @CNPJ_BANDEIRA          CHAR(14),
        @CNPJ_MATRIZ            CHAR(14),
        @CNPJ_ADM               CHAR(14),
        @CNPJ_ESTABELECIMENTO   CHAR(14),
        @CCCPF                  CHAR(14),
        @VALOR                  FLOAT,
        @QTDRegistro            INT
-- inicializa variaveis
SELECT
        @VALOR          = 0,
        @QTDRegistro    = 0
-- cria tabele temporária 
SELECT 
        LA.CNPJ_ADM,
        LA.CCCPF
INTO
        #TMP_LANCREDITO
FROM
        LANCREDITO LA
        INNER JOIN VVAUTOCAR_ADM AD 
                ON AD.CNPJ_ADM=LA.CNPJ_ADM AND AD.STATUS='A'
WHERE
        LA.CNPJ_ADM     = @CNPJ_ADM 
-- SOMA 1 MES EM DTFECHAMENTO = EX. 2010-06-30    
SET     @DTFUTURO       = CONVERT(CHAR(10),DATEADD(MONTH,1,@DTFECHAMENTO),120) 
-- declara cursor
DECLARE C_C01 CURSOR FOR
SELECT
        EC.CNPJ_ADM,
        EC.CNPJ_ESTABELECIMENTO
FROM
        VVAUTOCAR_ESTABADMCICLO EC
WHERE
        SUBSTRING(EC.FECHACREDITO,1,1)  ='D'
GROUP BY
        EC.CNPJ_ADM,
        EC.CNPJ_ESTABELECIMENTO
ORDER BY
        1,2
-- abre o cursor
OPEN C_C01
FETCH NEXT FROM C_C01 INTO
                                    @CNPJ_ADM,
                                    @CCCPF
WHILE @@FETCH_STATUS = 0
BEGIN
    -- carga de variareis
    SELECT 
            @CNPJ_BANDEIRA          = AD.CNPJ_BANDEIRA,
            @CNPJ_MATRIZ            = AD.CNPJ_MATRIZ
    FROM
            VVAUTOCAR_ADM AD
    WHERE
            AD.CNPJ_ADM             = @CNPJ_ADM 
    -- checar se o registro existe
    SELECT
         TOP 1
         @VALOR                     = VALOR
    FROM
         CCPF
    WHERE
         CNPJ_ADM                   = @CNPJ_ADM AND
         CCCPF                      = @CCCPF
    ORDER BY
         LANCREEXTRATOCRE DESC
    -- pega quantidade de registros do select
    SELECT
         @QTDRegistro               = @@ROWCOUNT,
         @VALOR                     = ISNULL(@VALOR,0)
    -- registro exite - ( ALTERA )
    IF @QTDRegistro>0 
        UPDATE 
                CCPF
        SET 
                VALOR               = VALOR + @VALOR,
                DTMODI              = CONVERT(CHAR(19),GETDATE(),120)
        WHERE 
                CNPJ_ADM            = @CNPJ_ADM
        AND     CCCPF               = @CCCPF
    -- nao localizou o registro - ( INSERE )
    IF @QTDRegistro=0
         INSERT INTO CCPF(
                                    CNPJ_ADM,
                                    @CCCPF,
                                    VALOR)
         VALUES
                                    @CNPJ_ADM,
                                    @CCCPF,
                                    @VALOR)

    -- avança 1 registro no cursor
    FETCH NEXT FROM C_C01 INTO      @CNPJ_ADM,

                                    @CCCPF
END
-- tira cursor da memoria do servidor
CLOSE C_C01
DEALLOCATE C_C01