Usuário com melhor resposta
insert com consulta

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....
Respostas
-
Olá Lissandra,
A forma como vc fez está correta, apenas terá que colocar um BEGIN e END para o IF, assim:
Code SnippetCREATE PROCEDURE up_InsereAliquota
@stAliquotaPadrao bit,
@stAliquotaBloqueada bit,
@vlrAliquota numeric(5,2)
ASif not exists(select stAliquotaPadrao from dm_AliquotaISS where stAliquotaPadrao = 1)
BEGIN
INSERT INTO dm_AliquotaISS
(stAliquotaPadrao, stAliquotaBloqueada, vlrAliquota)
VALUES (@stAliquotaPadrao, @stAliquotaBloqueada, @vlrAliquota)
return 0END
else
return 1
GO
Esse retorno, você pode pegar assim:Code SnippetDECLARE @Ret INT
EXEC @Ret = up_InsereAliquota @Param1, @Param2, @Param3
Qualquer problema, retorne.
Abraço
-
Olá Lissandra,
Neste caso vai ter que colocar as três colunas no Order By. Desta forma:
Code SnippetCREATE 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
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 SnippetCREATE PROCEDURE up_InsereAliquota
@stAliquotaPadrao bit,
@stAliquotaBloqueada bit,
@vlrAliquota numeric(5,2)
ASif not exists(select stAliquotaPadrao from dm_AliquotaISS where stAliquotaPadrao = 1)
BEGIN
INSERT INTO dm_AliquotaISS
(stAliquotaPadrao, stAliquotaBloqueada, vlrAliquota)
VALUES (@stAliquotaPadrao, @stAliquotaBloqueada, @vlrAliquota)
return 0END
else
return 1
GO
Esse retorno, você pode pegar assim:Code SnippetDECLARE @Ret INT
EXEC @Ret = up_InsereAliquota @Param1, @Param2, @Param3
Qualquer problema, retorne.
Abraço
-
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.... -
Olá Lissandra,
Neste caso vai ter que colocar as três colunas no Order By. Desta forma:
Code SnippetCREATE 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