Alguem sabe como posso fazer isso via sql?

27/04/2013

como fazer com que um registro possa ser inserido com determinado nome,determinado numero de vezes

exemplo

a tabela funcionarios so aceita o nome joao ate 25 vezes repetidamente

Edon Ramos

Respostas

02/05/2013

Cesar Roniglei

Bom dia, você pode efetuar uma verificação antes da inserção, caso haja 25 inserções você não efetua a inserção.
Ex:

Select Count(*) As Qtde From Tabela
Where Nome = @Nome

Responder Citar

02/05/2013

Mariana Carvalho

não sabia e nem sei se tem essa possibilidade, mas fiquei de olho neste post, isso me pode ser bastante util.
legal a sua duvida.
Responder Citar

02/05/2013

Alex Lekao

Ola Boa tarde!!!!

Acredito que seria interessante tentar usar uma trigguer ou verificar se ha alguma possibilidade de fazer isso mediante restricao do campo ou tabela, nao tenho muita certeza de como utilizar em nenhum dos dois pq nao tenho o habito de utilizar, mas verifique alguma coisa a este respeito, restricoes de tabelas/campos e trigguer.

Acredito que conseguira fazer o que precisa.

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder Citar

02/05/2013

Joel Rodrigues

Eu vejo duas opções para fazer isso, sendo a primeira mais interessante que a segunda:

1) Use um stored procedure para fazer a inserção. Nele fica fácil controlar essa quantidade.

2) Crie um trigger before insert na tabela. Nele você conta os registros a partir do nome que está sendo inserido e, caso atinja a quantidade definida, gere um erro para cancelar o insert (use a função RAISEERROR).
Responder Citar

24/05/2013

Guilherme Wiethaus

Coloque isto numa trigger do tipo "AFTER INSERT"

Através de uma trigger (gatilho) todo conteúdo inserido vai em uma tabela temporária chamada inserted.

O código abaixo precisa ser aperfeiçoado, é apenas exemplificação e não se presta para meio de produção, pois requer algumas verificações no relacionamento entre as tabelas. Por exemplo pode haver funciona´rios com mesmo nome pas são pessoas diferentes. O mais correto no relacionamento entre tabelas seria através de um código dele ou seu cpf, já que estes registro é incluído uma vez e não poderá ser modificado. Assim se prestando como chave de registro para um bom relacionamento.

BEGIN TRY

  SET NOCOUNT ON;

  If EXISTS (SELECT Count(Funcionarios.*) As Qtde
             FROM Funcionarios INNER JOIN inserted on inserted.Nome = Funcionarios.Nome
             WHERE Funcionarios >= 25)
  BEGIN
     RAISERROR ('Erro 001: Funcionario já chegou ao limite de inclusão.', 16, 1);
     RETURN;
  END;

END TRY
BEGIN CATCH
  DECLARE @ErrorMessage NVARCHAR(4000);
  DECLARE @ErrorSeverity INT;
  DECLARE @ErrorState INT;

  SELECT @ErrorMessage = ERROR_MESSAGE();
  SELECT @ErrorSeverity = ERROR_SEVERITY();
  SELECT @ErrorState = ERROR_STATE();

  ROLLBACK TRAN;

  RAISERROR (@ErrorMessage, -- Message text.
             @ErrorSeverity, -- Severity.
             @ErrorState -- State. 
  );
  PRINT 'ERROR_MESSAGE: ' + @ErrorMessage + ' ERROR_SEVERITY ' + 
        CAST(@ErrorSeverity AS VARCHAR(50)) + ' ERROR_STATE: ' + 
        @ErrorState;
  RETURN;
END CATCH
Responder Citar