insert condicional
Bom dia pessoal !
Tenho uma tabela de cadastrar equipamentos (EQU_ID) em manutenção mas um equipamento so pode ser cadastrado novamente se o status dele (STA_ID) for igual de 1 (1 é liberado)
alguém pode me ajudar ??
estou usando a stored procedure abaixo mas do jeito que esta ai abaixo ele inserir independente do status (STA_ID) do equipamento (EQU_ID) e o que preciso que so pode ser inserido se o equipamento não estiver mais na oficina ou seja STA_ID = 1
procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT
AS
BEGIN
INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@
DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)
END
Tenho uma tabela de cadastrar equipamentos (EQU_ID) em manutenção mas um equipamento so pode ser cadastrado novamente se o status dele (STA_ID) for igual de 1 (1 é liberado)
alguém pode me ajudar ??
estou usando a stored procedure abaixo mas do jeito que esta ai abaixo ele inserir independente do status (STA_ID) do equipamento (EQU_ID) e o que preciso que so pode ser inserido se o equipamento não estiver mais na oficina ou seja STA_ID = 1
procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT
AS
BEGIN
INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@
DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)
END
Rafael
Curtidas 0
Respostas
Joel Rodrigues
15/04/2012
Faça algo desse tipo, adaptando:
Boa sorte.
DECLARE @LIBERADO INT SELECT @LIBERADO = (SELECT STA_ID FROM TABELA WHERE FILTRO) IF @LIBERADO = 1 INSERT...
Boa sorte.
GOSTEI 0
Rafael
15/04/2012
Obrigado Jair por responder!
mas o filtro no caso seria o EUQ_ID = @EQUIPAMENTO_ID ?
tentei todas possibilidade que eu imaginei mas da o seguinte erro
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
tentei da seguinte forma
procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT
,@LIBERADO INT
AS
BEGIN
SELECT @LIBERADO = (SELECT STA_ID FROM MANUTENCOES WHERE EQU_ID = @EQUIPAMENTO)
IF @LIBERADO = 3
INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)
END
mas o filtro no caso seria o EUQ_ID = @EQUIPAMENTO_ID ?
tentei todas possibilidade que eu imaginei mas da o seguinte erro
A subconsulta retornou mais de 1 valor. Isso não é permitido quando a subconsulta segue um =, !=, <, <= , >, >= ou quando ela é usada como uma expressão.
tentei da seguinte forma
procedure [dbo].[INSERIR_MANUTENCAO]
@OFICINA VARCHAR(10)
,@OS VARCHAR (10)
,@STATUS INT
,@LOCAL VARCHAR (20)
,@EQUIPAMENTO_ID INT
,@DESCRICAO VARCHAR (100)
,@OBSERVACAO VARCHAR (500)
,@DT_INICIO DATETIME
,@DT_PREVISAO DATETIME
,@TIPO_SERVICO INT
,@TIPO_PREVENTIVA INT
,@LIBERADO INT
AS
BEGIN
SELECT @LIBERADO = (SELECT STA_ID FROM MANUTENCOES WHERE EQU_ID = @EQUIPAMENTO)
IF @LIBERADO = 3
INSERT INTO MANUTENCOES (MAN_OFICINA,MAN_OS ,STA_ID ,MAN_LOCAL ,EQU_ID,MAN_DESCRICAO ,MAN_OBSERVACAO ,MAN_DT_INICIO,MAN_DT_PREVISAO,TIPO_SERVICO_ID,TIPO_PREV_ID)
VALUES (@OFICINA,@OS,@STATUS,@LOCAL,@EQUIPAMENTO_ID,@DESCRICAO,@OBSERVACAO,@DT_INICIO,@DT_PREVISAO,@TIPO_SERVICO,@TIPO_PREVENTIVA)
END
GOSTEI 0
Joel Rodrigues
15/04/2012
Bem, acho que a lógica é essa mesmo, porém você precisa fazer um filtro que retorne apenas um registro. Por exemplo, você quer saber o status de um equipamento, então o resultado da consulta deve ser o STA_ID do equipamento. Não posso nem detalhar muito, pois não conheço a estrutura das tabelas. Mas é por aí...
GOSTEI 0
Emerson Nascimento
15/04/2012
você grava o status do equipamento na tabela de manutenções?
não deveria ficar gravado no cadastro do equipamento?
deveria ser algo assim:
equi
---------
equip_id
descricao
status
[demais campos]
manutencao
-----------
manutencao_id
oficina_id
os_id
equip_id
dataentrada
datasaida
dessa forma, você altera o cadastro do equipamento quando ele entrar em manutenção quando ele sair dela.
não deveria ficar gravado no cadastro do equipamento?
deveria ser algo assim:
equi
---------
equip_id
descricao
status
[demais campos]
manutencao
-----------
manutencao_id
oficina_id
os_id
equip_id
dataentrada
datasaida
dessa forma, você altera o cadastro do equipamento quando ele entrar em manutenção quando ele sair dela.
GOSTEI 0