babaloricha Postado Agosto 21, 2007 Denunciar Share Postado Agosto 21, 2007 Bom dia!como é que eu faco para verificar um registro que esta sendo colocado no banco, tem um campo que é = a um campo de eum registro que já esta no banco?obrigado! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Agosto 30, 2007 Denunciar Share Postado Agosto 30, 2007 como é que eu faco para verificar um registro que esta sendo colocado no banco, tem um campo que é = a um campo de eum registro que já esta no banco?faz tempo que não mexo com SQLSever, mas você não conseguiria implementar dentro da trigger algo como:... IF (SELECT COUNT(*) FROM inserted) > 0 BEGIN -- testar ser algum dos itens inseridos já está na base de dados IF (SELECT COUNT(*) FROM inserted WHERE exists(SELECT 1 FROM <tabela> WHERE <tabela>.<campo> =inserted.<campo>)) > 0 BEGIN RAISERROR('Um item já existe. Inclusão cancelada.',16,1); -- gera uma exceção personalizada ROLLBACK; -- desfaz qualquer ação na transação corrente RETURN; -- evita que linhas posteriores sejam executadas END ENDlembro-me que a trigger não é disparada para cada item incluído, assim se faz necessário tratar inserted como uma possível lista de linhas.Se este exemplo puder ser implementado, ele estará cancelando a inclusão de todas as linhas, mesmo que apenas uma já exista. Mas, se isto não for desejado, então teria que ser implementado algum tipo de loop (se não estou enganado utilizando cursor) para avaliar cada item da lista em insertedEspero ter colaborado. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Elber Carretoni Postado Setembro 14, 2007 Denunciar Share Postado Setembro 14, 2007 como é que eu faco para verificar um registro que esta sendo colocado no banco, tem um campo que é = a um campo de eum registro que já esta no banco?faz tempo que não mexo com SQLSever, mas você não conseguiria implementar dentro da trigger algo como:... IF (SELECT COUNT(*) FROM inserted) > 0 BEGIN -- testar ser algum dos itens inseridos já está na base de dados IF (SELECT COUNT(*) FROM inserted WHERE exists(SELECT 1 FROM <tabela> WHERE <tabela>.<campo> =inserted.<campo>)) > 0 BEGIN RAISERROR('Um item já existe. Inclusão cancelada.',16,1); -- gera uma exceção personalizada ROLLBACK; -- desfaz qualquer ação na transação corrente RETURN; -- evita que linhas posteriores sejam executadas END ENDlembro-me que a trigger não é disparada para cada item incluído, assim se faz necessário tratar inserted como uma possível lista de linhas.Se este exemplo puder ser implementado, ele estará cancelando a inclusão de todas as linhas, mesmo que apenas uma já exista. Mas, se isto não for desejado, então teria que ser implementado algum tipo de loop (se não estou enganado utilizando cursor) para avaliar cada item da lista em insertedEspero ter colaborado.Micheus...a trigger é sim disparada para cada item inserido...toda vez que você executar um insert, a trigger inserted irá disparar com ctz...não entendi perfeitamente sua referência por 'lembro-me que a trigger não é disparada para cada item incluído, assim se faz necessária tratar inserted como uma possível lista de linhas'.Logo depois que a trigger terminar seu processo de execução, todos os itens (somente 1) que estiver em inserted será excluído...é como tratar inserted como uma variável table temporária, que se auto-elimina no fim do procedimento...estou certo? corrija-me se não, por favor...caso vá trabalhar com cursores, aconselho que não o faça...cursores são problemáticos, e apesar de, na minha opnião, serem mais 'delicados' para trabalhar, geralmente não conseguem dissernir uma sessão de outra, inutilizando a definição de cursor local e cursor global.Caso necessite realmente trabalhar com uma variável mutidimensional, trabalhe com uma VARIAVEL TABLE, resgatando seus valores linha por linha através de um campo identity...bom, é minha opnião...analise cada caso e retorne os resultados...Abraços a todos! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Setembro 26, 2007 Denunciar Share Postado Setembro 26, 2007 Micheus...a trigger é sim disparada para cada item inserido...toda vez que você executar um insert, a trigger inserted irá disparar com ctz...não entendi perfeitamente sua referência por 'lembro-me que a trigger não é disparada para cada item incluído, assim se faz necessária tratar inserted como uma possível lista de linhas'.este comentário foi porque, se eu não me engano (faz um tempão que não mexo com SQLServer) quando era executado um comando como DELETE FROM (com vários registros), a trigger era chamada apenas uma vez para todos os excluídos e não uma vez para cada uma das linhas eliminadas.Mas pelo seu comentário, falei besteira. Obrigado pela correção. ;) Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
babaloricha
Bom dia!
como é que eu faco para verificar um registro que esta sendo colocado no banco, tem um campo que é = a um campo de eum registro que já esta no banco?
obrigado!
Link para o comentário
Compartilhar em outros sites
3 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.