1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| USE TEMP ;
IF EXISTS(SELECT name FROM sysobjects WHERE type='U' AND name = 'TELEPHONE')
DROP TABLE TELEPHONE ;
IF EXISTS(SELECT name FROM sysobjects WHERE type='U' AND name = 'PERSONNE')
DROP TABLE PERSONNE ;
CREATE TABLE PERSONNE
(
PsnId INT NOT NULL,
PsnLibelle VARCHAR(16) NOT NULL,
CONSTRAINT PSN_PK PRIMARY KEY (PsnId)
) ;
CREATE TABLE TELEPHONE
(
PsnId INT NOT NULL ,
TelId TINYINT NOT NULL ,
TelNo VARCHAR(24) NOT NULL
CONSTRAINT TEL_PK PRIMARY KEY (PsnId, TelId),
CONSTRAINT TEL_FK FOREIGN KEY (PsnId) REFERENCES PERSONNE (PsnId) ON DELETE CASCADE
) ;
INSERT INTO PERSONNE VALUES (1, 'Albert') ;
INSERT INTO PERSONNE VALUES (2, 'Bernard') ;
INSERT INTO PERSONNE VALUES (3, 'Carole') ;
SELECT '' AS 'PERSONNE', * FROM PERSONNE ;
INSERT INTO TELEPHONE VALUES (1, 1, '00 33 (0)123 456 789') ;
INSERT INTO TELEPHONE VALUES (1, 2, '00 33 (0)123 456 790') ;
INSERT INTO TELEPHONE VALUES (2, 1, '00 33 (0)234 654 322') ;
INSERT INTO TELEPHONE VALUES (2, 2, '00 33 (0)234 654 323') ;
INSERT INTO TELEPHONE VALUES (2, 3, '00 33 (0)234 654 324') ;
SELECT '' AS 'TELEPHONE', * FROM TELEPHONE ;
DECLARE @WTEL AS TABLE
(
PsnId INT NOT NULL,
TelNo VARCHAR(24) NOT NULL
) ;
INSERT INTO @WTEL VALUES (1, '00 33 (0)123 456 791') ; -- nouveau
INSERT INTO @WTEL Values (1, '00 33 (0)123 456 792') ; -- et un autre
INSERT INTO @WTEL Values (2, '00 33 (0)234 654 325') ; -- nouveau
INSERT INTO @WTEL Values (2, '00 33 (0)234 654 326') ; -- et un autre
INSERT INTO @WTEL Values (3, '00 33 (0)300 000 001') ; -- le tout 1er pour la personne
INSERT INTO @WTEL Values (3, '00 33 (0)300 000 002') ; -- nouveau
INSERT INTO @WTEL Values (3, '00 33 (0)300 000 003') ; -- nouveau
SELECT '' as '@WTEL',* from @WTEL
DECLARE @PsnId INT, @TelId TINYINT, @TelNo VARCHAR(24) ;
DECLARE @TournezManege INT ;
DECLARE C1 CURSOR FOR
SELECT PsnId, TelNo
FROM @WTEL ;
OPEN C1 ;
SET @TournezManege = 1
WHILE @TournezManege = 1
BEGIN
FETCH C1 INTO @PsnId, @TelNo
IF @@FETCH_STATUS = 0
BEGIN
SET @TelId = (SELECT COALESCE(MAX(x.TelId), 0)
FROM TELEPHONE AS x JOIN @WTEL AS y
ON x.PsnId = y.PsnId
GROUP BY x.PsnId
HAVING x.PsnId = @PsnId
) ;
SET @TelId = CAST(COALESCE(@TelId,0) as INT) + 1
INSERT INTO TELEPHONE (PsnId, TelId, TelNo) VALUES (@PsnId, @TelId, @TelNo)
END
ELSE
BEGIN
SET @TournezManege = 0
END
END
CLOSE C1 ;
DEALLOCATE C1 ;
SELECT '' AS 'TELEPHONE après', * FROM TELEPHONE ; |
Partager