skcratch Posted May 14, 2008 at 05:54 PM Report Share #185108 Posted May 14, 2008 at 05:54 PM Viva! Pretendo criar uma stored procedure que me permita realizar o update dos campos de uma tabela que já foram previamente inseridos na base de dados. No entanto, a minha intenção é criar uma stored procedure que permita não só actualizar todos os campos mas também algum em particular, que seja passado como parâmetro na stored procedure. Numa primeira abordagem, pensei em inicializar todas as variáveis de entrada da stored procedure correspondentes aos campos da tabela a NULL e verificar posteriormente o seu valor. Os parâmetros que se mantivessem a NULL na invocação da stored procedure, significava que não iria ser realizada qualquer actualização no campo correspondente da tabela. Na vossa opinião, existe alguma forma mais eficaz de realizar aquilo que pretendo? Grato desde já pela ajuda, Cumps! 😉 Link to comment Share on other sites More sharing options...
skcratch Posted May 14, 2008 at 06:57 PM Author Report Share #185117 Posted May 14, 2008 at 06:57 PM Viva! O código que tenho é o seguinte: create procedure spAlterarAtleta @nomeProcura nvarchar(100), @nome nvarchar(100) = null, @dataNascimento datetime = null, @sexo nvarchar(10) = null, @numBI varchar(10) = null as begin transaction declare @idAtleta int set @idAtleta = (select idatleta from atleta where nome = @nomeProcura) if(@@error <> 0) goto erro if(@idAtleta is null) goto erroAtletaNaoExiste update atleta set nome = @nome where idAtleta = @idAtleta if(@@error <> 0) goto erro commit transaction return 0 erroAtletaNaoExiste: print 'O atleta não existe na base de dados!' erro: print 'Ocorreu um erro!' rollback transaction return 1 go exec spAlterarAtleta 'Filipe Henriques', 'Rui Gonçalves' Tal como referi no post anterior, aquilo que pretendo é actualizar apenas alguns campos. Como podem ver, o nome que pretendo alterar é passado como parâmetro na stored procedure realizando a respectiva actualização. No entanto, desejo que a stored procedure seja "inteligente", isto é, que realize apenas a actualização na tabela dos parâmetros que são passados na sua invocação, sem ter que recorrer a um if para verificar se todos parâmetros passados, são ou não nulos. Cumps! 😉 Link to comment Share on other sites More sharing options...
Betovsky Posted May 14, 2008 at 10:00 PM Report Share #185177 Posted May 14, 2008 at 10:00 PM Acho que estás a complicar desnecessariamente. CREATE procedure spAlterarAtleta ( @nomeProcura nvarchar(100) , @nome nvarchar(100) = NULL , @dataNascimento datetime = NULL , @sexo nvarchar(10) = NULL , @numBI varchar(10) = NULL ) AS Update atleta Set nome = IsNull(@nome, nome) , dataNascimento = IsNull(@dataNascimento, dataNascimento) , sexo = IsNull(@sexo, sexo) , numBI = IsNull(@numBI, numBI) Where nome = @nomeProcura Como não sabia o nome das colunas supus que o nome delas é similar ao nome da variável correspondente. "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
skcratch Posted May 14, 2008 at 11:22 PM Author Report Share #185209 Posted May 14, 2008 at 11:22 PM Viva! Já percebi a tua ideia mas, ou estou a invocar mal a stored procedure, ou não é uma solução correcta. Por exemplo, para alterar apenas o sexo (exemplo duvidoso...!!!) de um atleta, eu invoco da seguinte forma a stored procedure: exec spAlterarAtleta 'Mario', '', '', 'feminino' No entanto, vai haver alteração dos outros registos da tabela, ficando o nome em branco e a data de nascimento a 01-01-1900 00:00:00. Estou a realizar mal a invocação da stored procedure? Grato desde já pela ajuda, Cumps! 😉 Link to comment Share on other sites More sharing options...
Betovsky Posted May 15, 2008 at 08:37 AM Report Share #185233 Posted May 15, 2008 at 08:37 AM Presumo que queiras fazer: exec spAlterarAtleta 'Mario', null, null, 'feminino' "Give a man a fish and he will eat for a day; Teach a man to fish and he will eat for a lifetime. The moral? READ THE MANUAL !" Sign on a computer system consultant's desk Link to comment Share on other sites More sharing options...
skcratch Posted May 15, 2008 at 06:48 PM Author Report Share #185343 Posted May 15, 2008 at 06:48 PM Viva! Já confirmei, era erro na invocação da stored procedure. Quando invoquei segundo aquilo que sugeriste, fez aquilo que pretendia. Obrigado pela ajuda! Cumps! 😉 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now