2012-01-16 3 views
1

Comment insérer plusieurs données dans mssql sans utiliser de boucle? Je développe un système de gestion de la clinique, alors que le médecin peut donner quelques médicaments pour le patient, donc je l'espère dans ma base de données, les données ressemblerontcomment insérer plusieurs données avec la même clé étrangère

|-----------------------------------| 
| RecordID | ItemID | Amount| 
|-----------------------------------| 
|  1  |  1  | 10 | 
|  1  |  2  | 100 | 
-------------------------------------- 

et maintenant ce que je reçois est ...

|-----------------------------------| 
| RecordID | ItemID | Amount| 
|-----------------------------------| 
|  1  |  1  | 10 | 
|  2  |  2  | 100 | 
-------------------------------------- 

parce que j'utilise la procédure de magasin et boucle nécessaire pour stocker tous "ItemID" en sql.

+------------+  +-----------------+  
| record  |  | record_items |  
+------------+  +-----------------+  
|RecordID(PK)| > | RecordID (FK) | 
|PatientID |  | ItemID   |  
|Precription |  | Amount   | 
|VisitDate |  +-----------------+ 
+------------+ 

ceci est mon 2 tables, je l'espère pour le stockage des données, la recordID n'augmenterons pas en fonction du nombre ItemID inséré.

ALTER PROCEDURE [dbo].[InsertPatientRecord] 
    -- Add the parameters for the stored procedure here 
    @PatientID INT, 
    @Prescription VARCHAR(50), 
    @VisitDate DATETIME, 
    @ItemID INT, 
    @Amount INT 

AS 

SET NOCOUNT On 

    DECLARE @RecordID INT 


     INSERT INTO record VALUES(@PatientID,@Prescription,@VisitDate) 
     SET @RecordID=Scope_Identity() 

    INSERT INTO record_item VALUES(@RecordID,@ItemID,@Amount) 


RETURN 

ceci est ma procédure stockée

+0

votre code postal pour magasin Procédure –

+0

J'espère que c'est des devoirs. Vos questions semblent simples pour quelqu'un qui développe apparemment un système vital. Avez-vous envisagé d'intégrer un système de prescription électronique tiers ou peut-être d'acheter un système de gestion de clinique entier plutôt que d'essayer d'en construire un vous-même? – onedaywhen

+0

ya, c'est juste un devoir – user1151874

Répondre

1

Puisque vous potentiellement avoir plusieurs record_items pour chaque record, vous devez avoir deux procédures stockées: un à écrire record (une fois) et à en écrire chacun des record_items associé à l'enregistrement.

Pour que cela fonctionne correctement, après avoir écrit record, vous devrez récupérer le recordid afin qu'il puisse être passé à la procédure stockée pour record_items.

Voici un aperçu des procédures stockées; le reste du travail que je te laisserai. Une note: le RecordId est renvoyé à l'appelant puisqu'il s'agit d'un paramètre de sortie. Cela signifie que vous devrez exécuter cette procédure à l'aide d'une commande (ce que vous devez faire de toute façon) et devrez extraire cette valeur de ce paramètre après l'exécution de la procédure stockée.

Voici le record sp:

ALTER PROCEDURE [dbo].[InsertPatientRecord] 
    @RecordId  INT OUTPUT , 
    @PatientID INT, 
    @Prescription VARCHAR(50), 
    @VisitDate DATETIME 
AS 

    INSERT INTO record VALUES(@PatientID,@Prescription,@VisitDate) 
    SET @RecordID=Scope_Identity() 

et est ici la record_items sp:

ALTER PROCEDURE [dbo].[InsertPatientRecordItem] 
    @RecordID  INT, 
    @ItemID INT, 
    @Amount INT 

AS 
    INSERT INTO record_item VALUES(@RecordID,@ItemID,@Amount) 
0

Vous pouvez utiliser INSERT INTO SELECT pour insérer à la fois. Vérifiez this pour plus d'informations.


En ce qui concerne votre problème, peut-être vous insérez la même valeur dans RecordID et ItemID. Seulement avec du code, nous pouvons vous en dire plus.

Questions connexes