如何使用相同的外键插入多个数据

时间:2012-01-16 12:49:02

标签: sql vb.net stored-procedures

如何在不使用循环的情况下将多个数据插入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个表,我希望在存储数据时,recordID不会根据插入的ItemID数量而增加。

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

这是我的存储过程

2 个答案:

答案 0 :(得分:1)

由于每个record_items可能有多个record,因此您需要有两个存储过程:一个用于编写record(一次),另一个用于编写每个record_items record 1}}与记录相关联。

为了使这项工作正常,在编写recordid之后,您需要检索record_items,以便将其传递给record的存储过程。

以下是存储过程的概要;剩下的工作我会留给你。

一个注意事项:RecordId返回给调用者,因为它是一个输出参数。这意味着您需要使用命令执行此过程(无论如何都应该执行此操作),并且需要在执行存储过程后检索此参数的值。

这是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() sp:

record_items

这里是ALTER PROCEDURE [dbo].[InsertPatientRecordItem] @RecordID INT, @ItemID INT, @Amount INT AS INSERT INTO record_item VALUES(@RecordID,@ItemID,@Amount) sp:

{{1}}

答案 1 :(得分:0)

您可以使用INSERT INTO SELECT一次插入所有内容。查看this了解详情。


关于您的问题,您可能会在RecordIDItemID中插入相同的值。只有一些代码,我们可以告诉你更多。