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:
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


Respuesta Responder a este mensaje
#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
Respuesta Responder a este mensaje
#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:
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:
> 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
>
>


Respuesta Responder a este mensaje
#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:
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:
> 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:
> > 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
> >
> >
>
>


Respuesta Responder a este mensaje
#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:
¿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:
> 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:
> > 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:
> > > 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
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida