Como solucionar esto sin sql dinamico?

04/04/2004 - 13:38 por Jose Antonio | Informe spam
En una tabla maestra que se compone de dos columnas CODIGO Y NOMBRE.

Cada una de las filas de esta tabla es realmente la definicion de una
columna en otra tabla DETALLE, con una columna fija que es ORDEN.

El CODIGO de la tabla maestra es el nombre de la columna a insertar y el
NOMBRE de la tabla maestra es el contenido de esta columna en su fila 0.

Utilizo un trigger, para que al insertar una fila en la tabla maestra, este
me inserte en la tabla detalle la columna y su valor. Solo se inserta una
fila a la vez en la tabla maestra.

Trigger para insert:

DECLARE @CODIGO VARCHAR(3)
DECLARE @NOMBRE VARCHAR(35)
SELECT @CODIGO=CODIGO FROM INSERTED
SELECT @NOMBRE=NOMBRE FROM INSERTED
IF NOT EXISTS(SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='ANALITICA' AND COLUMN_NAME=@CODIGO)
BEGIN
EXEC('ALTER TABLE ANALITICA ADD ['+@CODIGO+'] VARCHAR(35) NULL')
EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+@NOMBRE+' WHERE
ORDEN=0')
END

Hay alguna forme de hacerlo sin Sql Dinamico?

Tengo otro problema, en el segundo EXEC me da error es decir si ejecuto
EXEC('UPDATE ANALITICA SET [000]=PRIMERA COLUMNA WHERE ORDEN=0') que es como
lo traduce el sql, medice que hay un error cerca de COLUMNA.

Realmente debiera ser EXEC('UPDATE ANALITICA SET [000]='PRIMERA COLUMNA'
WHERE ORDEN=0') y funciona correcto, pero no se como añadir las comillas
antes de PRIMERA y después de COLUMNA en la instruccion original
EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+(Aqui)+@NOMBRE+(y Aqui)+' WHERE
ORDEN=0').


Saludos y gracias.

Preguntas similare

Leer las respuestas

#1 Adrian D. Garcia
05/04/2004 - 10:29 | Informe spam
Veamos..
Para el tema que estas planteando, no veo otra solucion que usar SQL
dinamico. Podrias mejorar el rendimiento si en vez de utilizar EXEC( .. )
utilizaras sP_execsql. Fijate en los BOL sobre su uso y sintaxis.

En cuanto al segundo problema intenta con esto:

EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='''+@NOMBRE+''' WHERE ORDEN=0')

Fijate en las comillas simples adicionales que tiene la consulta. Son 3
comillas simples antes y despues del nombre. En T-SQL cuando encuentra 2
coimmlas simples dentro de un liteal, las interpreta no como fin del literal
sino como una comilla simple embebida.

Saludos

Adrian D. Garcia
NDSoft
MCSD
"Jose Antonio" escribió en el mensaje
news:%233$
En una tabla maestra que se compone de dos columnas CODIGO Y NOMBRE.

Cada una de las filas de esta tabla es realmente la definicion de una
columna en otra tabla DETALLE, con una columna fija que es ORDEN.

El CODIGO de la tabla maestra es el nombre de la columna a insertar y el
NOMBRE de la tabla maestra es el contenido de esta columna en su fila 0.

Utilizo un trigger, para que al insertar una fila en la tabla maestra,


este
me inserte en la tabla detalle la columna y su valor. Solo se inserta una
fila a la vez en la tabla maestra.

Trigger para insert:

DECLARE @CODIGO VARCHAR(3)
DECLARE @NOMBRE VARCHAR(35)
SELECT @CODIGO=CODIGO FROM INSERTED
SELECT @NOMBRE=NOMBRE FROM INSERTED
IF NOT EXISTS(SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='ANALITICA' AND COLUMN_NAME=@CODIGO)
BEGIN
EXEC('ALTER TABLE ANALITICA ADD ['+@CODIGO+'] VARCHAR(35)


NULL')
EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+@NOMBRE+' WHERE
ORDEN=0')
END

Hay alguna forme de hacerlo sin Sql Dinamico?

Tengo otro problema, en el segundo EXEC me da error es decir si ejecuto
EXEC('UPDATE ANALITICA SET [000]=PRIMERA COLUMNA WHERE ORDEN=0') que es


como
lo traduce el sql, medice que hay un error cerca de COLUMNA.

Realmente debiera ser EXEC('UPDATE ANALITICA SET [000]='PRIMERA COLUMNA'
WHERE ORDEN=0') y funciona correcto, pero no se como añadir las comillas
antes de PRIMERA y después de COLUMNA en la instruccion original
EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+(Aqui)+@NOMBRE+(y Aqui)+' WHERE
ORDEN=0').


Saludos y gracias.


Respuesta Responder a este mensaje
#2 Jose Antonio
06/04/2004 - 08:46 | Informe spam
Perfecto. Ok.

"Adrian D. Garcia" escribió en el mensaje
news:
Veamos..
Para el tema que estas planteando, no veo otra solucion que usar SQL
dinamico. Podrias mejorar el rendimiento si en vez de utilizar EXEC( .. )
utilizaras sP_execsql. Fijate en los BOL sobre su uso y sintaxis.

En cuanto al segundo problema intenta con esto:

EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='''+@NOMBRE+''' WHERE ORDEN=0')

Fijate en las comillas simples adicionales que tiene la consulta. Son 3
comillas simples antes y despues del nombre. En T-SQL cuando encuentra 2
coimmlas simples dentro de un liteal, las interpreta no como fin del


literal
sino como una comilla simple embebida.

Saludos

Adrian D. Garcia
NDSoft
MCSD
"Jose Antonio" escribió en el mensaje
news:%233$
> En una tabla maestra que se compone de dos columnas CODIGO Y NOMBRE.
>
> Cada una de las filas de esta tabla es realmente la definicion de una
> columna en otra tabla DETALLE, con una columna fija que es ORDEN.
>
> El CODIGO de la tabla maestra es el nombre de la columna a insertar y el
> NOMBRE de la tabla maestra es el contenido de esta columna en su fila 0.
>
> Utilizo un trigger, para que al insertar una fila en la tabla maestra,
este
> me inserte en la tabla detalle la columna y su valor. Solo se inserta


una
> fila a la vez en la tabla maestra.
>
> Trigger para insert:
>
> DECLARE @CODIGO VARCHAR(3)
> DECLARE @NOMBRE VARCHAR(35)
> SELECT @CODIGO=CODIGO FROM INSERTED
> SELECT @NOMBRE=NOMBRE FROM INSERTED
> IF NOT EXISTS(SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
> TABLE_NAME='ANALITICA' AND COLUMN_NAME=@CODIGO)
> BEGIN
> EXEC('ALTER TABLE ANALITICA ADD ['+@CODIGO+'] VARCHAR(35)
NULL')
> EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+@NOMBRE+' WHERE
> ORDEN=0')
> END
>
> Hay alguna forme de hacerlo sin Sql Dinamico?
>
> Tengo otro problema, en el segundo EXEC me da error es decir si ejecuto
> EXEC('UPDATE ANALITICA SET [000]=PRIMERA COLUMNA WHERE ORDEN=0') que es
como
> lo traduce el sql, medice que hay un error cerca de COLUMNA.
>
> Realmente debiera ser EXEC('UPDATE ANALITICA SET [000]='PRIMERA COLUMNA'
> WHERE ORDEN=0') y funciona correcto, pero no se como añadir las comillas
> antes de PRIMERA y después de COLUMNA en la instruccion original
> EXEC('UPDATE ANALITICA SET ['+@CODIGO+']='+(Aqui)+@NOMBRE+(y Aqui)+'


WHERE
> ORDEN=0').
>
>
> Saludos y gracias.
>
>


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