Tablas dinamicas en SQL

16/04/2004 - 12:17 por take2k3 | Informe spam
Hola a todos,
Mi problema es el siguiente:

Tengo una estructura de una bdd fija, con tres tablas (productos,
proveedores, categorias) y cada una de ellas con unas columnas fijas
generales, id_pro, nom_prod, id_prov, nom_prov, etc, ..., lo que
quiero hacer es crear mas columnas desde una aplicacion .NET, desde un
WebForm el usuario tiene que introducir un nombre de tabla y otro de
columna para crear en dicha tabla una columna nueva.
Lo he intentado hacer usando un procedimiento almacenado (uso
SQLServer2000) que le pase por parametros el nombre de la tabla y el
nombre de la nueva columna, utilizando:

CREATE PROCEDURE Crear_Campo @nom_tabla varchar(15), @nom_columna
varchar(15) AS
ALTER TABLE @nom_tabla ADD @nom_columna varchar(15) NULL

pero no me funciona, el problema creo que es que no se pueden utilizar
parametros de entrada en instrucciones como ALTER TABLE.

Otra cosa que he intentado hacer es usando trigers, mediante una tabla
intermedia (tbUpdate) con los campos (nom_tabla, nom_columna) y que
cada vez que se inserte un registro en esa tabla que salte un trigger
que cree la nueva columna en la tabla especificada usando los valores
de la tabla tbUpdate.

Es posible hacer esto? o si alguien tiene alguna idea diferente le
agradeceria infinito que me la dijera, no tengo mucha idea en
SQLServer2000 por eso estoy teniendo bastantes problemas.

GRACIAS por adelantado.

Preguntas similare

Leer las respuestas

#1 manel gonzalez
16/04/2004 - 12:31 | Informe spam
No creo que se pueda ejecutar una sentencia con parámetros que definan la
tabla

Prueba con EXEC(). Tienes mas información en los BOL. Mira este
procedimiento

CREATE PROCEDURE Crear_Campo @nom_tabla varchar(15), @nom_columna
varchar(15) AS
DECLARE @SQL AS VARCHAR(200)

SET @SQL = 'ALTER TABLE ' + @nom_tabla + ' ADD ' + @nom_columna + '
VARCHAR(15) NULL'
EXEC(@SQL)


"Takashi" escribió en el mensaje
news:
Hola a todos,
Mi problema es el siguiente:

Tengo una estructura de una bdd fija, con tres tablas (productos,
proveedores, categorias) y cada una de ellas con unas columnas fijas
generales, id_pro, nom_prod, id_prov, nom_prov, etc, ..., lo que
quiero hacer es crear mas columnas desde una aplicacion .NET, desde un
WebForm el usuario tiene que introducir un nombre de tabla y otro de
columna para crear en dicha tabla una columna nueva.
Lo he intentado hacer usando un procedimiento almacenado (uso
SQLServer2000) que le pase por parametros el nombre de la tabla y el
nombre de la nueva columna, utilizando:

CREATE PROCEDURE Crear_Campo @nom_tabla varchar(15), @nom_columna
varchar(15) AS
ALTER TABLE @nom_tabla ADD @nom_columna varchar(15) NULL

pero no me funciona, el problema creo que es que no se pueden utilizar
parametros de entrada en instrucciones como ALTER TABLE.

Otra cosa que he intentado hacer es usando trigers, mediante una tabla
intermedia (tbUpdate) con los campos (nom_tabla, nom_columna) y que
cada vez que se inserte un registro en esa tabla que salte un trigger
que cree la nueva columna en la tabla especificada usando los valores
de la tabla tbUpdate.

Es posible hacer esto? o si alguien tiene alguna idea diferente le
agradeceria infinito que me la dijera, no tengo mucha idea en
SQLServer2000 por eso estoy teniendo bastantes problemas.

GRACIAS por adelantado.
Respuesta Responder a este mensaje
#2 Javier Loria
16/04/2004 - 14:20 | Informe spam
Hola:
La DDL (Sintaxis de Declaracion de Objetos) debe hacerse directamente
desde el cliente, yo prescindiria del procedimiento. Construirira la
sentencia con un string en .NET haciendo
Sentencia="ADD TABLE "+nombreTabla+ " ADD COLUMN " +
Y luego desde un sqlcommand lo ejecutas.
Por otra parte, porque querrias que un usuario agregue columnas a la
BD?, eso me parece medio suicida.
Saludos,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

Takashi escribio:
Hola a todos,
Mi problema es el siguiente:

Tengo una estructura de una bdd fija, con tres tablas (productos,
proveedores, categorias) y cada una de ellas con unas columnas fijas
generales, id_pro, nom_prod, id_prov, nom_prov, etc, ..., lo que
quiero hacer es crear mas columnas desde una aplicacion .NET, desde un
WebForm el usuario tiene que introducir un nombre de tabla y otro de
columna para crear en dicha tabla una columna nueva.
Lo he intentado hacer usando un procedimiento almacenado (uso
SQLServer2000) que le pase por parametros el nombre de la tabla y el
nombre de la nueva columna, utilizando:

CREATE PROCEDURE Crear_Campo @nom_tabla varchar(15), @nom_columna
varchar(15) AS
ALTER TABLE @nom_tabla ADD @nom_columna varchar(15) NULL

pero no me funciona, el problema creo que es que no se pueden utilizar
parametros de entrada en instrucciones como ALTER TABLE.

Otra cosa que he intentado hacer es usando trigers, mediante una tabla
intermedia (tbUpdate) con los campos (nom_tabla, nom_columna) y que
cada vez que se inserte un registro en esa tabla que salte un trigger
que cree la nueva columna en la tabla especificada usando los valores
de la tabla tbUpdate.

Es posible hacer esto? o si alguien tiene alguna idea diferente le
agradeceria infinito que me la dijera, no tengo mucha idea en
SQLServer2000 por eso estoy teniendo bastantes problemas.

GRACIAS por adelantado.
Respuesta Responder a este mensaje
#3 take2k3
17/04/2004 - 22:01 | Informe spam
PERFECTO!!!!
El procedimiento funciona a la perfeccion, muchisimas gracias, ya lo
tenia hecho utilizando los comandos desde .NET, pero me parece que voy
a intentar modificarlo para dejarlos un poco mas profesional.
Respecto a para que lo quiero, en realidad el usuario no seria el
usuario final de la aplicacion realizada, es mas para el usuario
desarrollador, algo parcido a un asistente para personalizarte la base
de datos de la aplicación, con las restricciones necesarias.
GRACIAS DE NUEVO.
Respuesta Responder a este mensaje
#4 take2k3
17/04/2004 - 22:03 | Informe spam
PERFECTO!!!!
El procedimiento funciona a la perfeccion, muchisimas gracias, ya lo
tenia hecho utilizando los comandos desde .NET, pero me parece que voy
a intentar modificarlo para dejarlos un poco mas profesional.
Respecto a para que lo quiero, en realidad el usuario no seria el
usuario final de la aplicacion realizada, es mas para el usuario
desarrollador, algo parcido a un asistente para personalizarte la base
de datos de la aplicación, con las restricciones necesarias.
GRACIAS DE NUEVO.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida