hacer un SELECT de una tabla parametrica

30/11/2005 - 19:10 por Juan Carlos | Informe spam
Hola:

En una base de datos tengo un procedimiento que quisiera que hiciera un
"SELECT" de una tabla dentro de una base de datos que viene por parámetro.

¿Existe alguna forma de hacer esto?¿Tengo que usar el tipo "table"?

Gracias,
juan carlos

Preguntas similare

Leer las respuestas

#1 _ C l a u d i n h o _
30/11/2005 - 19:21 | Informe spam
CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200),
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO
Respuesta Responder a este mensaje
#2 Maxi
30/11/2005 - 19:25 | Informe spam
Hola, dos cosas

1) No es bueno usar SQL_dinamico
2) si lo vas a usar entonces usa sp_executesql

Nota: porque hacer un sp's parametrico? la preguntra viene por esto: Si una
de las ventajas enormes que me da un Sp's es el aislamiento y el control de
la seguridad, en sql2000 al usar sql-dinamico ya pierdo esa ventaja del
control de la seguridad, entonces para que hacer el sp?

Ademas como piensan controlar la injection de codigo, en esa variable
alguien podria poner ';drop table loquefuere;'

Un abrazo


Salu2
Maxi [MVP SQL SERVER]


"_ C l a u d i n h o _" escribió en el
mensaje news:%

CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200),
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO
Respuesta Responder a este mensaje
#3 Alejandro Mesa
30/11/2005 - 20:17 | Informe spam
_ C l a u d i n h o _,

Cuando hablamos de sql dinamico, siempre es prudente hablar tambien de la
inyeccion de codigo sql. Corre este script, que usa el procedimiento que
posteastes, para que veas el resultado cuando no tenemos en cuenta este tema.

use master
go

create database test
go

use test
go

select top 1 * into t1 from northwind.dbo.orders
select top 1 * into t2 from northwind.dbo.orders
select top 1 * into t3 from northwind.dbo.orders
go

CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200)
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO

select 't1' as table_name, count(*) as rowcnt from t1
select 't1' as table_name, count(*) as rowcnt from t2
select 't1' as table_name, count(*) as rowcnt from t3
go

exec stp_ParametroSeleccion '(select 1 as c1) as a; exec sp_msforeachtable
''delete ?'''
go

select 't1' as table_name, count(*) as rowcnt from t1
select 't1' as table_name, count(*) as rowcnt from t2
select 't1' as table_name, count(*) as rowcnt from t3
go

drop procedure stp_ParametroSeleccion
go

use master
go

drop database test
go


AMB

"_ C l a u d i n h o _" wrote:


CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200),
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO


Respuesta Responder a este mensaje
#4 Juan Carlos
02/12/2005 - 15:02 | Informe spam
Bueno, gracias a todos por las respuestas.
Necesitaba usar SQL Dinámico porque necesito tomar registros de una BD
externa que puede tener cualquier nombre. Todavía no se si lo voy a hacer
asi pero bueno, ya sé como hacerlo :).

Aca encontre algo interesante y en español sobre el sql dinamico:
http://www.willydev.net/descargas/p...namico.PDF

Gracias,
Juan Carlos


"Alejandro Mesa" escribió en el
mensaje news:
_ C l a u d i n h o _,

Cuando hablamos de sql dinamico, siempre es prudente hablar tambien de la
inyeccion de codigo sql. Corre este script, que usa el procedimiento que
posteastes, para que veas el resultado cuando no tenemos en cuenta este
tema.

use master
go

create database test
go

use test
go

select top 1 * into t1 from northwind.dbo.orders
select top 1 * into t2 from northwind.dbo.orders
select top 1 * into t3 from northwind.dbo.orders
go

CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200)
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO

select 't1' as table_name, count(*) as rowcnt from t1
select 't1' as table_name, count(*) as rowcnt from t2
select 't1' as table_name, count(*) as rowcnt from t3
go

exec stp_ParametroSeleccion '(select 1 as c1) as a; exec sp_msforeachtable
''delete ?'''
go

select 't1' as table_name, count(*) as rowcnt from t1
select 't1' as table_name, count(*) as rowcnt from t2
select 't1' as table_name, count(*) as rowcnt from t3
go

drop procedure stp_ParametroSeleccion
go

use master
go

drop database test
go


AMB

"_ C l a u d i n h o _" wrote:


CREATE PROCEDURE stp_ParametroSeleccion
(
@NombreTabla Varchar(200),
)
AS
declare @strSQL as varchar(1000)

set @strSQL ='Select * from ' + @NombreTabla

execute(@strSQL)
GO


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida