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

Insertar datos en vista

Estas en el tema de Insertar datos en vista en el foro de SQL Server en Foros del Web. Hola Tengo el siguiente problema, tras una migración de una base de datos access a SQL server 2005 a la cual se accede desde una ...
  #1 (permalink)  
Antiguo 18/07/2007, 05:02
 
Fecha de Ingreso: abril-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 0
Insertar datos en vista

Hola

Tengo el siguiente problema, tras una migración de una base de datos access a SQL server 2005 a la cual se accede desde una aplicación en VB me ha dejado de funcionar una ficha que hace una insercion de datos en una vista que mete datos en dos tablas, en access funcionaba perfecto y ahora en sql server ya no funciona, he leido que esto se soluciona con creando un TRIGGER con INSTEAD OF lo estoy intentando y no soy capaz de que funcione y me juego mi puesto de trabajo, alguien me puede ayudar??

aqui pego la consulta que en access si funcionaba:

Código:
SELECT ListadoMateriales.IdObra_LM, ListadoMateriales.IdLinea_LM, ListadoMateriales.Recibido_LM, ListadoMateriales.DetallesParaPedido_LM, ListadoMateriales.IdPedido_LM, ListadoMateriales.Verificado_LM, Materiales.IdMaterial, ListadoMateriales.Estado_LM, Materiales.Proveedor_Material, Materiales.ReferenciaProveedor_Material, Materiales.Descripcion_Material, Materiales.EnAlmacen_Material, ListadoMateriales.CantidadAPedir_LM, ListadoMateriales.CantidadNecesaria_LM, Materiales.PlazoEntrega_Material, ListadoMateriales.Detalles_LM, ListadoMateriales.Proveedor_LM, ListadoMateriales.Descripcion_LM, ListadoMateriales.AnchoProducto_LM, ListadoMateriales.AltoProducto_LM, ListadoMateriales.EspesorProducto_LM, ListadoMateriales.LargoProducto_LM, ListadoMateriales.Recibido_LM, ListadoMateriales.Verificado_LM, ListadoMateriales.Estado_LM, ListadoMateriales.Color_LM, Materiales.Detalles_Material, ListadoMateriales.Tratamiento_LM, Materiales.UnidadVenta_Material, Materiales.UnidadesUnidadVenta_Material, Materiales.TipoMaterial_Material, Materiales.PerfilOAccesorio_Material, IIf(Int([CantidadAPedir_LM]/[UnidadVenta_material])=[CantidadAPedir_LM]/[UnidadVenta_material],Int([CantidadAPedir_LM]/[UnidadVenta_material]),Int([CantidadAPedir_LM]/[UnidadVenta_material])+1) AS UV_a_Pedir, ListadoMateriales.Estado_LM, ListadoMateriales.Etiquetado_LM, ListadoMateriales.DetallesParaPedido_LM, ListadoMateriales.Etiquetado_LM, Materiales.PerfilOAccesorio_Material, ListadoMateriales.EstadoTratamiento_LM, Materiales.PerimetroExterior_Material, Materiales.PerimetroInterior_Material, Materiales.CaraVista_Material, ListadoMateriales.PerimetroInterior_LM, ListadoMateriales.PerimetroExterior_LM, ListadoMateriales.CaraVista_LM, ListadoMateriales.UnidadesUnidadVenta_LM, ListadoMateriales.CantidadEnTaller_LM, ListadoMateriales.CantidadEnObra_LM, ListadoMateriales.CantidadPendiente_LM, ListadoMateriales.CantidadPreparada_LM, ListadoMateriales.CantidadDudosa_LM, ListadoMateriales.CantidadRechazada_LM, ListadoMateriales.CantidadRecibida_LM
FROM Materiales INNER JOIN ListadoMateriales ON Materiales.IdMaterial = ListadoMateriales.IdMaterial_LM
ORDER BY ListadoMateriales.IdObra_LM, ListadoMateriales.IdLinea_LM;

y esta es la vista en SQL Server:

Código:
SELECT     TOP (2147483647) WITH TIES dbo.ListadoMateriales.IdObra_LM, dbo.ListadoMateriales.IdLinea_LM, dbo.ListadoMateriales.IdPedido_LM, 
                      dbo.Materiales.IdMaterial, dbo.Materiales.Proveedor_Material, dbo.Materiales.ReferenciaProveedor_Material, dbo.Materiales.Descripcion_Material, 
                      dbo.Materiales.EnAlmacen_Material, dbo.ListadoMateriales.CantidadAPedir_LM, dbo.ListadoMateriales.CantidadNecesaria_LM, 
                      dbo.Materiales.PlazoEntrega_Material, dbo.ListadoMateriales.Detalles_LM, dbo.ListadoMateriales.Proveedor_LM, 
                      dbo.ListadoMateriales.Descripcion_LM, dbo.ListadoMateriales.AnchoProducto_LM, dbo.ListadoMateriales.AltoProducto_LM, 
                      dbo.ListadoMateriales.EspesorProducto_LM, dbo.ListadoMateriales.LargoProducto_LM, dbo.ListadoMateriales.Color_LM, 
                      dbo.Materiales.Detalles_Material, dbo.ListadoMateriales.Tratamiento_LM, dbo.Materiales.UnidadVenta_Material, 
                      dbo.Materiales.UnidadesUnidadVenta_Material, dbo.Materiales.TipoMaterial_Material, 
                      dbo.Materiales.PerfilOAccesorio_Material AS Materiales_PerfilOAccesorio_Material, (CASE WHEN floor([CantidadAPedir_LM] / [UnidadVenta_material]) 
                      = [CantidadAPedir_LM] / [UnidadVenta_material] THEN floor([CantidadAPedir_LM] / [UnidadVenta_material]) 
                      ELSE floor([CantidadAPedir_LM] / [UnidadVenta_material]) + 1 END) AS UV_a_Pedir, 
                      dbo.Materiales.PerfilOAccesorio_Material AS Materiales_PerfilOAccesorio_Material$8, dbo.ListadoMateriales.EstadoTratamiento_LM, 
                      dbo.Materiales.PerimetroExterior_Material, dbo.Materiales.PerimetroInterior_Material, dbo.Materiales.CaraVista_Material, 
                      dbo.ListadoMateriales.PerimetroInterior_LM, dbo.ListadoMateriales.PerimetroExterior_LM, dbo.ListadoMateriales.CaraVista_LM, 
                      dbo.ListadoMateriales.UnidadesUnidadVenta_LM, dbo.ListadoMateriales.CantidadEnTaller_LM, dbo.ListadoMateriales.CantidadEnObra_LM, 
                      dbo.ListadoMateriales.CantidadPendiente_LM, dbo.ListadoMateriales.CantidadPreparada_LM, dbo.ListadoMateriales.CantidadDudosa_LM, 
                      dbo.ListadoMateriales.CantidadRechazada_LM, dbo.ListadoMateriales.CantidadRecibida_LM, dbo.ListadoMateriales.Recibido_LM, 
                      dbo.ListadoMateriales.Verificado_LM, dbo.ListadoMateriales.Estado_LM, dbo.ListadoMateriales.DetallesParaPedido_LM, 
                      dbo.ListadoMateriales.Etiquetado_LM
FROM         dbo.Materiales INNER JOIN
                      dbo.ListadoMateriales ON dbo.Materiales.IdMaterial = dbo.ListadoMateriales.IdMaterial_LM
ORDER BY dbo.ListadoMateriales.IdObra_LM, dbo.ListadoMateriales.IdLinea_LM
  #2 (permalink)  
Antiguo 18/07/2007, 09:15
 
Fecha de Ingreso: noviembre-2006
Ubicación: México
Mensajes: 866
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Insertar datos en vista

Que tal Yabelyne.

Se puede con un trigger, pero igual de la siguiente manera también lo resuelves, y un poco más rápido ( ya cuando tengas tiempo, estudias los triggers).

sql1 = " INSERT INTO myTable1 (....) VALUES (...)"
sql2 = " INSERT INTO myTable2 (....) VALUES (...)"
sql = sql1 & ";" sql2
' Y ejecutas la sentencia SQL.

Saludos y éxito!!
  #3 (permalink)  
Antiguo 18/07/2007, 13:11
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Re: Insertar datos en vista

Un ejemplo de un trigger con las tablas que proporciona daniel00, seria.

CREATE TRIGGER trg_MyTrigger
ON Tabla1
FOR INSERT
AS
INSERT INTO Tabla2
SELECT * FROM INSERTED

Suponiendo que ambas tablas tienen EXACTAMENTE los mismos campos, de lo contrario, habria que cambiar el * (asterisco) por los nombres de los campos a insertar.

Saludos.
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 13:49.