Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Obtener columna que no existe, como?

Estas en el tema de Obtener columna que no existe, como? en el foro de SQL Server en Foros del Web. Buenos dias, En algunos momento resulta que realizan algun cambio e insertan una columna nueva en las insert, y claro la manera de obtener la ...
  #1 (permalink)  
Antiguo 15/12/2009, 04:52
Bil
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Obtener columna que no existe, como?

Buenos dias,
En algunos momento resulta que realizan algun cambio e insertan una columna nueva en las insert, y claro la manera de obtener la columnas que tiene una tabla es esta:
SELECT sc.name
FROM sys.objects so INNER JOIN sys.columns sc ON
so.[object_id]=sc.[object_id]
WHERE so.name='TABLA'

Pero esto nos devuelve las columnas existentes logicamente, pero si queremos que nos devuelva las nuevas columnas que no estan en la tabla como se podria realizar, las que existen ya me las lista pero con una select se podria obtener las nuevas columnas que se van a insertar en esa tabla.

Ejemplo
TABLA(COL1,COL2,COL3,COL4)
Cuando hacen la insert es la siguiente, introducen una columna nueva
insert into tabla(COL1,COL2,COL3,COL4,COLNUEVA1,COLNUEVA2,COLN UEVA3) value(.........)
Como puede saber que las columnas nuevas son COLNUEVA1,COLNUEVA2,COLNUEVA3 con una select?

Muchas gracias.


Un saludo.
  #2 (permalink)  
Antiguo 15/12/2009, 07:24
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Obtener columna que no existe, como?

si el objetivo es que los inserts ya generados en los sps no truenen cuando se agrega una columna, bastaria con ponerle un valor por default a las nuevas columnas.

Pero eso si, en el insert deben estar mencionadas explicitamente las columnas para los cuales se tienen valores..

Código:
-- Mala opcion

Insert into MiTabla
Select *
From   MiOtraTabla

--------------------------------

--Buena opcion

Insert into MiTabla (Col1, Col2)
Select Campo1, Campo2
From MiOtraTabla

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 15/12/2009, 07:44
Bil
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Obtener columna que no existe, como?

buenas tardes,
No es eso lo que se necesita. como comentas necesito saber cuales son las columnas nuevas para hacer un alter table con esas nuevas columnas y de ese modo la insert no fallaria.
El proceso seria el siguiente:
Tenemos la TABLA(COL1,COL2,COL3,COL4)
- Y viene una insert de este modo:
insert into tabla(COL1,COL2,COL3,COL4,COLNUEVA1,COLNUEVA2,COLN UEVA3) value(.........)
-Salta una excepcion y la capturamos y vamos a mirar las columnas:
Código:
SELECT sc.name
FROM sys.objects so INNER JOIN sys.columns sc ON
so.[object_id]=sc.[object_id]
WHERE so.name='TABLA'
Con eso sabemos las columnas que existen pero como sabemos las columnas nuevas que se quieren insertar para hacer el alter table.
-Una vez tengamos las nuevas columnas:
Alter Table con las nuevas columnas.

La duda entonces:
Como se puede saber cuales son las columnas nuevas de la insert son COLNUEVA1,COLNUEVA2,COLNUEVA3?

salu2.
  #4 (permalink)  
Antiguo 15/12/2009, 08:37
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Obtener columna que no existe, como?

Eso parece que el front esta generando un insert con columnas variables segun acuerdo a informacion externa...

aunque no es una practica muy comun...pero bueno...

una alternativa y tal vez la mejor seria, hacer esa diferencia desde el front, ya que es ahi donde sabes cuales columnas se agregaron...

La otra es en sql hacer un paso previo, generando una temporal con la info que se envia (con las nuevas columnas) y luego consultar la estructura de la temporal y asi se podra comparar con las columnas de la tabla fisica..

Código:

-- Crear la temporal, armando un select into en lugar de un insert into...

SELECT 'Value1' V1, 'Value2' V2  INTO #MiTablaTemporal 



-- Para consultar las columns de la temporal

SELECT     sc.*
FROM       tempdb.sys.columns sc 
WHERE      sc.[object_id] = object_id('tempdb..#MiTablaTemporal')
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 15/12/2009, 09:17
Bil
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Obtener columna que no existe, como?

Muchas gracias, esa era una de las alternativas que habia pensado, pero pensabamos que existia algun modo de que con una select nos devolviera las columnas nuevas de la tabla, y luego con ellas hacer el alter, pero como comentas esa ultima alternativa esta bien.
Pero con esta opcion tenemos la siguiente duda como se puede formar la select into obteniendo los datos de la insert, ya que la insert se forma de manera automatica, tendriamos que ir separandola de la insert nosotros para formar la select into imagino.
Cita:
Iniciado por Andres95 Ver Mensaje
Eso parece que el front esta generando un insert con columnas variables segun acuerdo a informacion externa...

aunque no es una practica muy comun...pero bueno...
Esto a que te refieres, aunq vamos a realizar la segunda alternativa que es mas limpia.

salu2.

Última edición por Bil; 15/12/2009 a las 09:42
  #6 (permalink)  
Antiguo 15/12/2009, 11:09
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Obtener columna que no existe, como?

asi es..

seria crear el select al momento de crear el insert...

una pregunta..

ese insert lo estas creando en un sp, en una dll, asp, o algo asi? en donde?


Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #7 (permalink)  
Antiguo 17/12/2009, 03:41
Bil
 
Fecha de Ingreso: noviembre-2006
Mensajes: 34
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta: Obtener columna que no existe, como?

gracias,
bien entonces tendremos que mirar para generar esa select cuando estemos generando la insert.
La genera un asp, como origen de datos de un xml.


salu2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:41.