22/05/2008, 09:43
|
| | Fecha de Ingreso: mayo-2008 Ubicación: Medellin
Mensajes: 17
Antigüedad: 16 años, 8 meses Puntos: 0 | |
Respuesta: insertar datos en tablas con relacion muchos a muchos en sql server Buen dia
acabo de solucionar el problema, el aporte de Quim me sirvio bastante para saber como hacerlo, por eso le doy las gracias. Para los que les interese esta es la forma como quedo el SP:
CREATE PROCEDURE dbo.spProcedure
@Dato1 varchar (300),
@Dato2 varchar (100),
@Dato3 varchar (20),
@Dato4 varchar (20),
@IDTabla2 int
AS
INSERT INTO Tabla1
(Dato1, Dato2, Dato3, Dato4)
VALUES (@Dato1, @Dato2, @Dato3, @Dato4)
DECLARE @IDTabla1 int SET @IDTabla1 = (SELECT MAX(IDTabla1) FROM Tabla1)
INSERT INTO Tabla1Tabla2 (IDTabla1,IDTabla2)
VALUES (@IDTabla1,@IDTabla2)
Lo de las subconsultas (sugerencia de Quim) dentro del insert no se puede hacer en SQL Server 2005. La linea que resalte se puede cambiar por:
SET @IDTabla1 = SCOPE_IDENTITY()
Si quieren mas info sobre SCOPE_IDENTITY(), puede verla en: "http://technet.microsoft.com/es-es/library/ms190315.aspx"
Ahora resuelto este problema, me queda la duda con respecto al diseño de mi BD, Quim dijo "... si el idtabla1 siempre es nuevo luego la relación N a M nunca se dará!! y si es asi igual tienes un error de diseño". Pues precisamente, es asi, el IDTabla1 siempre es nuevo. Para contextualizar mas el problema dejo la info:
Las dos tablas principales son: Donantes (tabla1) y TiposMateriales (tabla2 que ya tiene los datos), donde un donante puede donar muchos tipos de materiales y un tipo de material puede tener asociados muchos donantes, la tabla "detalle" que en mi caso es la composicion de las otras dos (DonantesTiposMateriales, tabla1tabla2) simplemente contiene los ID's de la otras dos tablas, no contiene mas campos.
Se me ocurre que la PK de la tabla donantes no debe ser solo el ID, creo que deberia ser una PK compuesta ya sea ID mas el nombre, o borrar el campo ID (que se genera e incrementa automaticamente) y establecer como PK la cedula o el nombre del donante + el material donado, quedo atento a las sugerencias
Muchas gracias por la colaboracion y atencion, hasta pronto |