Erro ao passar parametro para SP e usar na clausula FROM

16/08/2006

0

Estou com o seguinte problema:

Tenho que passar para a procedure o nome de 2 tabelas, que pra cada usuario no sistema o sistema cria uma nova tabela com o nome do usuario, pois bem preciso passar o nome das tabelas pra que eu possa navegar nelas pelo cursor. mais da o seguinte erro:

Server: Msg 137, Level 15, State 2, Procedure PCP_Revisao, Line 33
Must declare the variable ´@wp_Tmp_tb_Comp´.
Server: Msg 137, Level 15, State 1, Procedure PCP_Revisao, Line 41
Must declare the variable ´@wp_Tmp_tb_Pos´.


Como passei o dia inteiro procurando como resolver este problema e naum consegui to pedindo a ajuda de voces, abaixo segue a parte inicial da storedprocedure


CREATE procedure PCP_Revisao
@wp_idOS int,
@wp_idSO char(2),
@wp_idOF int,
@wp_idDsn varchar(20),
@wp_revisar char(5),
@wp_Tmp_tb_Comp sysname,
@wp_Tmp_tb_Pos sysname
as
--- Declaracao de variaveis
Declare @wp_TReg int

--- Declarando Variáveis do Cursor ...

Declare @idOSint,
@idSubObrachar(2),
@idOFint,
@idDesenhovarchar(20),
@idPosicaovarchar(15),
@idComponentevarchar(15),
@alt_nomevarchar(30),
@quem_revisouvarchar(30),
@pos_tipochar(1),
@revisarchar(5)

--- Declaracao de cursores

Declare CurComponentes cursor for
select alt_nome,quem_revisou,iddesenho,idposicao,idcomponente,revisar
from @wp_Tmp_tb_Comp
where (idOS = @wp_idOS) and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF) and (iddesenho = @wp_idDsn)
and (revisar is not null)
order by idOS, idSubObra, idOF, idDesenho, idPosicao, idComponente

Declare CurPosicoes cursor for
select alt_nome,quem_revisou,iddesenho,idposicao,revisar,pos_tipo
from @wp_Tmp_tb_Pos
where (idOS = @wp_idOS) and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF) and (iddesenho = @wp_idDsn)
and (revisar is not null)
order by idOS, idSubObra, idOF, idDesenho, idPosicao

Declare CurDesenhos cursor for
select alt_nome,quem_revisou,iddesenho,revisar
from desenho
where (idOS = @wp_idOS) and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF) and (iddesenho = @wp_idDsn)
and (revisar is not null)
order by idOS, idSubObra, idOF, idDesenho


begin

-- Abrindo o Cursor Componente
open CurComponentes
fetch next from CurComponentes into
@idDesenho,
@idPosicao,
@idComponente,
@alt_nome,
@quem_revisou,
@revisar
-- Loop Principal ...
while @@fetch_status = 0
begin
update componente set
dt_ult_Revisao = CURRENT_TIMESTAMP,
Quem_Revisou = @quem_revisou,
Descr_Revisao = @wp_revisar,
Alt_Nome = @alt_nome,
Alt_DataHora = CURRENT_TIMESTAMP
where (idOS = @wp_idOS)
and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF)
and (iddesenho = @idDesenho)
and (idPosicao = @idPosicao)
and (idComponente = @idComponente)
and (Dt_Ult_Revisao is null)

if @revisar <> ´X´
begin
insert into componente
select * from #@wp_Tmp_tb_Comp
where (idOS = @wp_idOS)
and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF)
and (iddesenho = @idDesenho)
and (idPosicao = @idPosicao)
and (idComponente = @idComponente)
end

update @wp_Tmp_tb_Pos set
Revisar = ´99´
where (idOS = @wp_idOS)
and (idSubObra = @wp_idSO)
and (idOF = @wp_idOF)
and (iddesenho = @idDesenho)
and (idPosicao = @idPosicao)
and (revisar is null)

fetch next from CurComponentes into
@idDesenho,
@idPosicao,
@idComponente,
@alt_nome,
@quem_revisou,
@revisar
end
close CurComponentes
deallocate CurComponentes
end


Mehvsc

Mehvsc

Responder

Posts

17/08/2006

Psergio.p

Caro amigo, veja abaixo se o exmplo te ajuda!

Vou colocar um artigo no site da SQL Magazine cobre Querys dinamicas, o que você acha?

DECLARE @strSQL NVARCHAR(200)
DECLARE @Tabela NVARCHAR(20)
DECLARE @NumeroC NVARCHAR(10)

SET @Tabela = ´tblCliente´

SET @strSQL = ´DECLARE cur_teste CURSOR FOR ´ +
´SELECT Codigo FROM ´ + @Tabela


EXEC sp_executesql @strSQL
EXEC sp_executesql N´OPEN cur_teste´

FETCH NEXT FROM cur_teste INTO @NumeroC

PRINT @NumeroC

CLOSE cur_teste
DEALLOCATE cur_teste


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar