• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

skcratch

Stored Procedure Update

6 mensagens neste tópico

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!

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Presumo que queiras fazer:

exec spAlterarAtleta 'Mario', null, null, 'feminino'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora