none
insert com consulta RRS feed

  • Pergunta

  • Bom pessoal, eu gostaria de fazer um insert só que eu gostaria de testar se já tem um campo chamado staliquotapadrao com status 1, caso ja tenha eu não faço o insert e devolvo um erro, caso contrário caso só tenha dados aonde este campo seja 0 eu posso inserir o dado com este campo =1.
    bom resumindo, eu só quero que 1 linha da tabela tenha este campo com staliquotapadrao =1.

    eu comecei:
    CREATE PROCEDURE up_InsereAliquota
    (
    @stAliquotaPadrao bit,
    @stAliquotaBloqueada bit,
    @vlrAliquota numeric(5,2)

    )
    AS

    if not exists(select stAliquotaPadrao from  dm_AliquotaISS where stAliquotaPadrao = 1)

        INSERT INTO dm_AliquotaISS
                                  (stAliquotaPadrao, stAliquotaBloqueada, vlrAliquota)
            VALUES     (@stAliquotaPadrao, @stAliquotaBloqueada, @vlrAliquota)
    --return 0
    --else
    --return 1
    --end
    GO
    mas eu sei que não é bem assim....
    terça-feira, 31 de julho de 2007 19:29

Respostas

  •  

     

    Olá Lissandra,

     

    A forma como vc fez está correta, apenas terá que colocar um BEGIN e END para o IF, assim:

     

    Code Snippet

    CREATE PROCEDURE up_InsereAliquota
    @stAliquotaPadrao bit,
    @stAliquotaBloqueada bit,
    @vlrAliquota numeric(5,2)
    AS

    if not exists(select stAliquotaPadrao from  dm_AliquotaISS where stAliquotaPadrao = 1)

    BEGIN

        INSERT INTO dm_AliquotaISS
                                  (stAliquotaPadrao, stAliquotaBloqueada, vlrAliquota)
            VALUES     (@stAliquotaPadrao, @stAliquotaBloqueada, @vlrAliquota)
        return 0

    END
    else
        return 1
    GO

     

     


    Esse retorno, você pode pegar assim:

     

    Code Snippet

    DECLARE @Ret INT

    EXEC @Ret = up_InsereAliquota @Param1, @Param2, @Param3

     

     

     

    Qualquer problema, retorne.

     

     

    Abraço

    terça-feira, 31 de julho de 2007 20:20
  •  

    Olá Lissandra,

     

    Neste caso vai ter que colocar as três colunas no Order By. Desta forma:

     

    Code Snippet
    CREATE   procedure up_ListarAliquotaCombo
    as
    select idAliquota,vlrAliquota
    from dm_AliquotaISS
    where  stAliquotaBloqueada = 0
    order by idAliquota, stPadrao DESC, vlrAliquota

     

     


    Desta forma, virá ordernado primeiro pela aliquota, dentro da aliquota virá primeiro a que tem o stPadrao = 1 e depois por valor.

     

    Seria essa sua necessidade??

     

     

    Abraço

     

    quarta-feira, 1 de agosto de 2007 13:05

Todas as Respostas

  •  

     

    Olá Lissandra,

     

    A forma como vc fez está correta, apenas terá que colocar um BEGIN e END para o IF, assim:

     

    Code Snippet

    CREATE PROCEDURE up_InsereAliquota
    @stAliquotaPadrao bit,
    @stAliquotaBloqueada bit,
    @vlrAliquota numeric(5,2)
    AS

    if not exists(select stAliquotaPadrao from  dm_AliquotaISS where stAliquotaPadrao = 1)

    BEGIN

        INSERT INTO dm_AliquotaISS
                                  (stAliquotaPadrao, stAliquotaBloqueada, vlrAliquota)
            VALUES     (@stAliquotaPadrao, @stAliquotaBloqueada, @vlrAliquota)
        return 0

    END
    else
        return 1
    GO

     

     


    Esse retorno, você pode pegar assim:

     

    Code Snippet

    DECLARE @Ret INT

    EXEC @Ret = up_InsereAliquota @Param1, @Param2, @Param3

     

     

     

    Qualquer problema, retorne.

     

     

    Abraço

    terça-feira, 31 de julho de 2007 20:20
  • Valeu, agora me diz uma coisa, eu queria fazer outra consulta de modo que ordenasse pela aliquota padrão e depois por ordem de valor.
    tipo a aliquota que tem o stpadrao = 1 vem primeiro e depois fosse ordenado por valor.

    eu tenho o select assim:

    CREATE   procedure up_ListarAliquotaCombo

    as
    select idAliquota,vlrAliquota
    from dm_AliquotaISS
    where  stAliquotaBloqueada = 0
    order by vlrAliquota
    GO

    se eu simplesmente colocar no where stpadrao =1, ele não traz as outras, pois só vai ter uma com este atributo....
    quarta-feira, 1 de agosto de 2007 12:26
  •  

    Olá Lissandra,

     

    Neste caso vai ter que colocar as três colunas no Order By. Desta forma:

     

    Code Snippet
    CREATE   procedure up_ListarAliquotaCombo
    as
    select idAliquota,vlrAliquota
    from dm_AliquotaISS
    where  stAliquotaBloqueada = 0
    order by idAliquota, stPadrao DESC, vlrAliquota

     

     


    Desta forma, virá ordernado primeiro pela aliquota, dentro da aliquota virá primeiro a que tem o stPadrao = 1 e depois por valor.

     

    Seria essa sua necessidade??

     

     

    Abraço

     

    quarta-feira, 1 de agosto de 2007 13:05