Array
(
)

O que há de errado?

Tfabbri
   - 05 fev 2004

O que há de errado com essa procedure?

CREATE PROC INICIALIZA_PAGINACAO
@CHAVE VARCHAR(30),
@TEMPTB VARCHAR(20),
@TABELA VARCHAR(20),
@CONDICOES VARCHAR(100),
@CPORDEM VARCHAR(25),
@TPORDEM VARCHAR(6)
AS

IF EXISTS(SELECT 1 FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @TEMPTB)
DROP TABLE @TEMPTB

SELECT IDENTITY(INT,1,1) IX, @CHAVE INTO @TEMPTB FROM @TABELA WHERE
@CONDICOES
ORDER BY @CPORDEM @TPORDEM

GO

Erros:

Server: Msg 170, Level 15, State 1, Procedure INICIALIZA_PAGINACAO, Line 11
Line 11: Incorrect syntax near ´@TEMPTB´.
Server: Msg 170, Level 15, State 1, Procedure INICIALIZA_PAGINACAO, Line 13
Line 13: Incorrect syntax near ´@TEMPTB´.

Julio Diniz
   - 09 fev 2004

Para poder fazer o vc quer, vc precisa usar o exec().

No lugar de usar drop table @Variavel use o seguinte:

exec ( ´drop table ´ + @Variavel )

No caso do select idem:

exec ( ´drop table ´ + @Variavel )

No caso de criar é a mesma coisa. Ex.:

declare
@tmp varchar(10),
@tmp2 varchar(10)

select
@tmp = ´dbo.teste´,
@tmp2 = ´dbo.teste2´

exec ( ´select * into ´ + @tmp2 + ´ From ´ + @tmp )

select * from teste2

Vale ressaltar q vc vai encontrar problemas com tabelas temporárias, se vc for criar desse jeito. Testei com tabelas físicas e funcionou,mas qdo fui criar uma tabela do tipo tralha ( #NomedaTabela ) deu erro.