Alguem sabe como posso fazer isso via sql?
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
exemplo
a tabela funcionarios so aceita o nome joao ate 25 vezes repetidamente
Edon Ramos
Curtidas 0
Respostas
Cesar Roniglei
27/04/2013
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:
Ex:
Select Count(*) As Qtde From Tabela Where Nome = @Nome
GOSTEI 0
Mariana Carvalho
27/04/2013
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.
legal a sua duvida.
GOSTEI 0
Alex Lekao
27/04/2013
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
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
GOSTEI 0
Joel Rodrigues
27/04/2013
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).
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).
GOSTEI 0
Guilherme Wiethaus
27/04/2013
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.
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
GOSTEI 0