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

Problema de consulta para insertar de datos

Estas en el tema de Problema de consulta para insertar de datos en el foro de SQL Server en Foros del Web. Saludos a la comunidad He abierto un nuevo tema debido a que no se como resolver el siguiente problema que tengo y es el siguiente: ...
  #1 (permalink)  
Antiguo 18/12/2008, 10:08
Avatar de Srkuen  
Fecha de Ingreso: abril-2008
Mensajes: 39
Antigüedad: 16 años, 1 mes
Puntos: 0
Problema de consulta para insertar de datos

Saludos a la comunidad

He abierto un nuevo tema debido a que no se como resolver el siguiente problema que tengo y es el siguiente:

Tengo las siguientes tablas en mi base de datos (Solo copien el link para poder ver la imagen por favor):

http://img373.imageshack.us/img373/9668/diagramaks8.jpg

Y necesito llenar con información las tablas Value y ValueXMortgage (ambas están en una relación de uno a uno y se maneja así por que mas adelante seguiré ingresando otros tipos de valor y para no dejar en blanco las columnas por eso se hizo una tabla de uno a uno) con los datos que tengo en las siguientes tablas que están en otra base de datos externa:

http://img296.imageshack.us/img296/5755/diagrama1yy9.jpg

Cuyos campos extraeré la información son: de la tabla mortgage: numfix_s, num_ref_hip_n, branch_s, date_prev_d, annot_prev_s, type_s; y de la tabla mortgage_inscription: date_regis_d, val_contr_n

Lo que no se es como llenar las tablas que les mencione (Value y ValueXMortgage) ya que están relacionadas uno a uno.

Se como se hace la consulta de inserción cuando se hace de una tabla a otra y tengo la forma de cómo ingresar los datos en la tabla Value y lo hago así:

INSERT INTO [Value]
SELECT cast(branch_s as int), cast(branch_s as int), '1', '1',
getdate(), getdate(), '1'
FROM [Lalibertad].dbo.mortgage

Donde el campo ValueId es identity, y para poder ingresar los datos de la tabla ValueXMortgage tengo la siguiente consulta:

INSERT ValueXMortgage
SELECT
mo.numfix_s, mo.num_ref_hip_n, mo.date_prev_d, mo.annot_prev_s,
mo.type_s, mi.date_regis_d, '1', GETDATE(), mi.val_contr_n
FROM
[Lalibertad].dbo.mortgage mo LEFT JOIN
[Lalibertad].dbo.mortage_inscription mi
ON mo.numfix_s = mi.numfix_s AND
mo.num_ref_hip_n = mi.num_ref_hip_n

Lo que realmente no se como me deben de cuadrar los datos ingresados tanto en Value como en ValueXMortgage, que tengan concordancia.

¿Qué me recomiendan hacer, como debería hacer la consulta?, ya que estoy bloqueado y no se que podría hacer.

Tengan en cuenta que no soy experto en esto, lastima que no puedo poner las imagenes directamente por que no tengo mas de 30 mensajes y bueno gracias de antemano por su ayuda y disculpas por quitar su valioso tiempo.
  #2 (permalink)  
Antiguo 18/12/2008, 10:40
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 9 meses
Puntos: 39
Respuesta: Problema de consulta para insertar de datos

Me parece que tienes mal definida la PK de tu tabla Value. Esta debe ayudarte a encontrar su correspondiente registro en mortgage, y luego sus hijos en mortgage_inscription.
Si no puedes redefinir tu PK, entonces tendrias que usar un cursor, donde vayas registro por registro insertando en ambas tablas a la vez, primero en Value y luego en ValueXMortgage.
Suerte!
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 18/12/2008, 11:39
Avatar de Srkuen  
Fecha de Ingreso: abril-2008
Mensajes: 39
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problema de consulta para insertar de datos

Gracias flaviovich por tu respuesta.

Espero no sacarte de tus casillas por lo que te preguntare pero ¿a que te refieres al redefinir mi ValueId (PK)? o te refieres con redefinir ¿a que deberia tener el mismo formato de la PK que esta en la tabla mortgage para poder encontrar los registros en esa misma tabla y en mortgage_inscription? por que si es asi si puedo cambiarla. La otra parte de usar un cursor no te lo entendi.

Saludos y gracias por tu valioso tiempo.
  #4 (permalink)  
Antiguo 18/12/2008, 11:53
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 9 meses
Puntos: 39
Respuesta: Problema de consulta para insertar de datos

La PK de tu tabla Value puede ser igual a mortgage, pero lo importante es que esta PK debe identificar a un registro en mortgage.
El cursor es un ciclo repetitivo que recorre un conjunto de registros previamente seleccionados.
Que version de SQL usas?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 18/12/2008, 11:54
Avatar de Srkuen  
Fecha de Ingreso: abril-2008
Mensajes: 39
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problema de consulta para insertar de datos

La version que estoy usando es la SQL 2005.
  #6 (permalink)  
Antiguo 19/12/2008, 16:05
Avatar de Srkuen  
Fecha de Ingreso: abril-2008
Mensajes: 39
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Respuesta: Problema de consulta para insertar de datos

Muy buenas y saludos a la comunidad

Ya hice los cambios a la base de datos y le cambie el tipo de referencia que tenía la tabla que va de uno a uno, bueno ahora va de uno a cero o uno y me quedo de la siguiente forma (hay copian la dirección por favor para que puedan verla):

http://img218.imageshack.us/img218/8797/diagrama2iq9.jpg

y puedo introducir lo datos en la tabla padre que es Value, pero todavía no puedo ingresar correctamente los datos a la tabla ValueXMortgage, he hecho esta consulta (donde importo los datos de la otra base de datos que tengo):

INSERT ValueXMortgage
SELECT
mo.numfix_s, mo.num_ref_hip_n, mo.annot_prev_s, mo.date_prev_d,
mo.type_s, mi.val_contr_n, mi.date_regis_d, '1', GETDATE()
FROM
[Lalibertad].dbo.mortgage mo LEFT JOIN [Lalibertad].dbo.mortage_inscription mi
ON mo.numfix_s = mi.numfix_s AND mo.num_ref_hip_n = mi.num_ref_hip_n
LEFT JOIN [Lalibertad].dbo.loansxmortgage lm
ON mo.numfix_s = lm.numfix_s AND mo.num_ref_hip_n = lm.num_ref_hip_n
JOIN [Lalibertad].dbo.creditos cr
ON lm.cod_cre = cr.cod_cre AND cr.estado IN ('F','G')

pero me devuelve este mensaje el sql server 2005:

Msg 213, Level 16, State 1, Line 1
Insert Error: Column name or number of supplied values does not match table definition.

¿Qué debo hacer para poder ingresar los datos a la tabla ValueXMortgage?

Y otra vez de antemano muchas gracias y disculpas por quitarles un poco de su valioso tiempo.
  #7 (permalink)  
Antiguo 19/12/2008, 16:35
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 9 meses
Puntos: 39
Respuesta: Problema de consulta para insertar de datos

Te falta hacer referencia a ValueId. Si no me equivoco tienes 2 alternativas:
1. pones los nombres de los campos: INSERT ValueXMortgage(NumFix,...)
2. pon un cero: SELECT 0, mo.numfix_s, ...
Ahora no tengo tiempo para revisar lo que has cambiado, pero viendo tu grafico, veo que no has cambiado como te dije.
Espero funcione como estas haciendo.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #8 (permalink)  
Antiguo 19/12/2008, 16:43
Avatar de Srkuen  
Fecha de Ingreso: abril-2008
Mensajes: 39
Antigüedad: 16 años, 1 mes
Puntos: 0
Respuesta: Problema de consulta para insertar de datos

Muchas gracias de verdad flaviovich ya que me has ayudado bastante, y si voy a terminar haciendo este query que es el que me funciono:

SELECT
cast(cast(mo.numfix_s as int)+mo.num_ref_hip_n as int),
mo.type_s, mo.numfix_s, mo.num_ref_hip_n, mo.annot_prev_s, mo.date_prev_d,
mo.type_s, mi.val_contr_n, mi.date_regis_d, '1', GETDATE()
FROM
[Value] va Left Join [Lalibertad].dbo.mortgage mo
ON cast(cast(mo.numfix_s as int)+mo.num_ref_hip_n as int) = va.ValueId
LEFT JOIN [Lalibertad].dbo.mortage_inscription mi
ON mo.numfix_s = mi.numfix_s AND mo.num_ref_hip_n = mi.num_ref_hip_n
LEFT JOIN [Lalibertad].dbo.loansxmortgage lm
ON mo.numfix_s = lm.numfix_s AND mo.num_ref_hip_n = lm.num_ref_hip_n
JOIN [Lalibertad].dbo.creditos cr
ON lm.cod_cre = cr.cod_cre AND cr.estado IN ('F','G')

Gracias por tu tiempo, y saludo que tengas un buen día.
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 22:16.