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
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
Curtir tópico
+ 0
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
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
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)