J'ai des enregistrements existants comme
ID Hospital ID Email Description
1 15 [email protected] Sample Description
2 15 [email protected] Random Text
J'ai besoin d'utiliser une boucle WHILE pour insérer des lignes avec l'ID de l'hôpital changeant en une valeur spécifique ou 32 dans ce cas, tandis que les autres (pas l'ID car il est généré automatiquement) restent constants.
Il devrait alors ressembler à
ID Hospital ID Email Description
1 15 [email protected] Sample Description
2 15 [email protected] Random Text
3 32 [email protected] Sample Description
4 32 [email protected] Random Text
Notez que ce qui précède a maintenant deux nouvelles lignes avec ID et ID d'hôpital différents. L'ID est généré automatiquement.
J'ai plusieurs tableaux où j'ai besoin de faire les mêmes mises à jour. Je ne veux pas utiliser le curseur si je peux le faire avec une boucle while.
EDIT La boucle while abandonnée comme solution plus simple a été fournie dans la réponse acceptée.
En supposant que ID
est une colonne d'identité:
INSERT INTO TheTable(HospitalID, Email, Description)
SELECT 32, Email, Description FROM TheTable
WHERE HospitalID <> 32
Essayez d'éviter les boucles avec SQL. Essayez plutôt de penser en termes d'ensembles.
Tout d'abord, je voudrais dire que je suis à 100% d'accord avec John Saunders sur le fait que vous devez éviter les boucles dans SQL dans la plupart des cas, en particulier dans la production.
Mais parfois, comme une seule fois pour remplir une table avec une centaine d'enregistrements à des fins de test à mon humble avis, c'est juste OK de vous faire plaisir à utiliser une boucle.
Par exemple, dans votre cas, pour remplir votre table avec des enregistrements avec des identifiants d'hôpital entre 16 et 100 et différencier les e-mails et les descriptions que vous auriez pu utiliser
CREATE PROCEDURE populateHospitals
AS
DECLARE @hid INT;
SET @hid=16;
WHILE @hid < 100
BEGIN
INSERT hospitals ([Hospital ID], Email, Description)
VALUES(@hid, 'user' + LTRIM(STR(@hid)) + '@mail.com', 'Sample Description' + LTRIM(STR(@hid)));
SET @hid = @hid + 1;
END
Et le résultat serait
ID Hospital ID Email Description
---- ----------- ---------------- ---------------------
1 16 [email protected] Sample Description16
2 17 [email protected] Sample Description17
...
84 99 [email protected] Sample Description99