2012-01-16 14 views
1

ループを使用せずに複数のデータをmssqlに挿入する方法はありますか?医師が患者にいくつかの薬を与えるかもしれないが 私はので、私は自分のデータベース内を願って、診療所の管理システムを開発しています、データは...今私は何を得る同じ外部キーを使用して複数のデータを挿入する方法

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

と次のようになります

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

私はストアプロシージャを使用しているため、すべての "ItemID"をSQLに格納するために必要なループです。

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

これは私の2つのテーブルで、私は、データを格納する際、レコードIDを挿入どのように多くのアイテムIDに基づいて増加しないことを願っています。

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 

これは、あなたはすべてを一度に挿入するためにINSERT INTO SELECTを使用することができ、私のストアドプロシージャ

+0

ストア手順 –

+0

のためのあなたのコードを投稿私は、これは宿題です願っています。あなたの質問は、生命に不可欠なシステムを明らかに開発している人にとって基本的なものです。第三者の電子処方システムを統合したり、おそらくあなた自身で構築しようとするよりも、診療管理システム全体を購入することを検討しましたか? – onedaywhen

+0

これは単なる宿題です – user1151874

答えて

1

は、次の2つのストアドプロシージャを持っている必要があります。一つは、レコードに関連付けられているrecord_itemsのそれぞれを書くために(1回)recordと1を書くこと。

recordを書き込んだ後、正しく動作させるには、record_itemsのストアドプロシージャに渡すことができるようにrecordidを取得する必要があります。

以下は、ストアドプロシージャの概要です。仕事の残りの部分は私があなたに残します。

注記:RecordIdは出力パラメータであるため、呼び出し元に戻されます。これは、コマンドを使用してこのプロシージャを実行する必要があり、ストアドプロシージャの実行後にこのパラメータの値を取得する必要があることを意味します。ここで

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() 

、ここではrecord_items SPです:

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

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

です。詳細はthisをご確認ください。


あなたの問題に関しては、おそらくあなたはRecordIDItemIDで同じ値を挿入しています。いくつかのコードでしかわかりません。あなたが潜在的に各recordに対して複数のrecord_itemsを持つことになりますので