Ver Mensaje Individual
  #4 (permalink)  
Antiguo 12/08/2010, 16:09
solangesql
 
Fecha de Ingreso: agosto-2010
Mensajes: 5
Antigüedad: 14 años, 3 meses
Puntos: 0
Gracias y os pido un poquito más!

Mil gracias chicos! Ya me funciono!
Pero llego con otros problemas :

1* Se puede poner o no, 4 FOreign Key en una tabla?

CREATE TABLE InscripcionCasal1
(
IdInscripcionCasal smallint not null IDENTITY PRIMARY KEY,
FechaInscripcion smalldatetime DEFAULT getdate(),
IdCasal_Insc smallint not null,
IdNino_Insc smallint not null,
IdOpcion_Insc smallint not null,
IdPagos_Insc smallint,
FOREIGN KEY (IdCasal_Insc) REFERENCES Casal(IdCasal)ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (IdNino_Insc) REFERENCES Nino(IdNino)ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (IdOpcion_Insc) REFERENCES Opciones(IdOpciones)ON UPDATE CASCADE ON DELETE CASCADE,
FOREIGN KEY (IdPagos_Insc) REFERENCES Pagos(IdPagos)ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT InscripcionUnica1 UNIQUE(IdCasal_Insc, IdNino_Insc,IdOpcion_Insc)
)

Me da estos errores:

Mens. 1785, Nivel 16, Estado 0, Línea 1
Si especifica la restricción FOREIGN KEY 'FK__Inscripci__IdOpc__5070F446' en la tabla 'InscripcionCasal1', podrían producirse ciclos o múltiples rutas en cascada. Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restricciones FOREIGN KEY.
Mens. 1750, Nivel 16, Estado 0, Línea 1
No se pudo crear la restricción. Consulte los errores anteriores.




2* Cómo restringir un campo para que sólo admita números? por ejemplo un campo de numero de telefono?



3* El problema más gordo. He enriquecido el procedimiento que me daba errores ayer con un CASE y no funciona. Es un poco largo... lo siento...



CREATE PROCEDURE PagosInscripcion
@Caso tinyint,
@Idcasal smallint,
@Idnino smallint,
@Pagado numeric(6,2),
@Idpagos smallint OUTPUT,
@Total numeric(6,2) OUTPUT
AS

SELECT --@Caso,
CASE @Caso
WHEN 1 THEN --- primer registro en pagos, primer plazo
-- Cálculo de la suma de todas las opciones escogidas
SELECT @Total=SUM(tarifa)
FROM InscripcionCasal,Opciones
WHERE IdCasal_insc=IdCasal_Op and IdOpcion_Insc=IdOpciones and IdNino_Insc=@Idnino
-- Inserción del registro de pago con el dinero pagado
INSERT INTO Pagos(TotalPago,PrimerPlazo,IdCasal_Pag,IdNino_pag )
VALUES (@Total,@Pagado,@IdCasal,@IdNino)
-- llamada de la función que recoge el identificante del pago
SELECT @Idpagos=dbo.GetIdPagos(@Idcasal, @Idnino)
-- YA ME HA FUNCIONADO, GRACIAS A VOSOTROS
-- actualización de la tabla inscripcion con el identificador del pago
UPDATE InscripcionCasal
SET IdPagos_Insc=@Idpagos
WHERE IdCasal_insc=@Idcasal and IdNino_Insc=@Idnino

WHEN 2 THEN --- segundo pago
-- Búsqueda del número de pago
SELECT DISTINCT @IdPagos=IdPagos_Insc -- DISTINCT porque cada opción tiene un registro
FROM InscripcionCasal
WHERE IdCasal_insc=@IdCasal and IdNino_Insc=@Idnino
-- actualización de la tabla inscripcion con el identificador del pago
UPDATE Pagos
SET SegundoPlazo=@Pagado, FechaSP=getdate()
WHERE IdPagos=@IdPagos

WHEN 3 THEN --- tercer pago
-- Búsqueda del número de pago
SELECT DISTINCT @IdPagos=IdPagos_Insc -- DISTINCT porque cada opción tiene un registro
FROM InscripcionCasal
WHERE IdCasal_insc=@IdCasal and IdNino_Insc=@Idnino
-- actualización de la tabla inscripcion con el identificador del pago
UPDATE Pagos
SET TercerPlazo=@Pagado, FechaTP=getdate()
WHERE IdPagos=@IdPagos
END



Y me da este error:
Mens 156, Nivel 15, Estado 1, Procedimiento PagosInscripcion, Línea 14
Sintaxis incorrecta cerca de la palabra clave 'SELECT'.
Mens 156, Nivel 15, Estado 1, Procedimiento PagosInscripcion, Línea 27
Sintaxis incorrecta cerca de la palabra clave 'WHEN'.
Mens 156, Nivel 15, Estado 1, Procedimiento PagosInscripcion, Línea 37
Sintaxis incorrecta cerca de la palabra clave 'WHEN'.
Mens 102, Nivel 15, Estado 1, Procedimiento PagosInscripcion, Línea 46
Sintaxis incorrecta cerca de 'END'.