Trigger con ALTER TABLE desde Select

06/07/2004 - 12:37 por Jomaweb | Informe spam
Hola:
Pretendo añadir un campo nuevo en la tabla de Campos por cada Categoria
añadida en la tabla Categorias..
Lo hago mediante el siguiente TRIGGER:

CREATE TRIGGER anadir_campo ON [dbo].[CATEGORIAS]
FOR INSERT
AS
declare @campo varchar(200)
select @campo=categoria from inserted
begin
ALTER TABLE campos ADD [ @campo ] DATETIME
end


El problema es que me añade literalmente "@campo", no el nombre del campo
real introducido. Los corchetes son para los nombres de campo con espacios.
Pero si los quito me da "error en @campo".

Sé que es un error de sintaxis pero no lo veo ¿podéis echarme una mano?

Gracias mil

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
06/07/2004 - 13:09 | Informe spam
No se puede porque lo tendrías que hacer con sql dinámico (EXEC o
SP_EXECUTESQL), construyendo la sentencia de alteración de tabla y
ejecutándola.

Sin embargo lo que estás haciendo no te lo puedo recomendar en absoluto.
No conozco la situación que te lleva a plantearte implementar ese código,
pero no creo que sea lo mejor ir modificando el diseño de una tabla cada vez
que se modifican los datos. ¿Por qué no explicas exactamente lo que estás
intentando hacer?


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Jomaweb" escribió en el mensaje
news:
Mostrar la cita
espacios.
Mostrar la cita
#2 SqlRanger [MVP .NET]
06/07/2004 - 13:16 | Informe spam
Tendrías que usar ejecución dinámica:

CREATE TRIGGER anadir_campo ON [dbo].[CATEGORIAS]
FOR INSERT
AS
begin

declare @campo varchar(200)
select @campo=categoria from inserted
EXEC ('ALTER TABLE campos ADD [' + @campo + '] DATETIME')

end

Saludos:

Jesús López
MVP .net
#3 Jomaweb
06/07/2004 - 14:06 | Informe spam
El motivo de hacerlo así es que en una de las vistas que presento al usuario
necesito Denormalizar y Pivotar una tabla. Es decir, que las columnas pasen
a ser filas y viceversa.
Como esto no se puede hacer en SQL Server, tengo la tabla generada gracias
al disparador y solamente tengo que rellenarla con un SELECT desde la
aplicación.

La solución de Jesús López es óptima, gracias


"Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
news:
Mostrar la cita
absoluto.
Mostrar la cita
vez
Mostrar la cita
campo
Mostrar la cita
#4 Carlos Sacristan
06/07/2004 - 14:17 | Informe spam
¿Pero no sería más sencillo implementar la transformación de los datos
directamente en la aplicación cliente? Yo sigo pensando que no es muy
recomendable que un usuario final tenga permisos de modificación sobre una
tabla, por las implicaciones que eso tiene..., aunque bueno, tampoco me voy
a meter en el diseño de tu aplicación ;-)


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro
Se agradece la inclusión de sentencias DDL


"Jomaweb" escribió en el mensaje
news:
Mostrar la cita
usuario
Mostrar la cita
pasen
Mostrar la cita
código,
Mostrar la cita
estás
Mostrar la cita
Categoria
Mostrar la cita
mano?
Mostrar la cita
#5 Jomaweb
06/07/2004 - 14:44 | Informe spam
Pues la verdad es que tienes razón , pero le he cogido el gustillo a esto
del T-SQL y estoy haciendo toda la capa de datos en el Servidor. El cliente
solo llama a procedimientos almacenados o visualiza vistas de datos.

"Carlos Sacristan" <csacristan ARROBA mvps.org> escribió en el mensaje
news:
Mostrar la cita
voy
Mostrar la cita
gracias
Mostrar la cita
cada
Mostrar la cita
Ads by Google
Search Busqueda sugerida