2011-12-27 78 views
2

我有两个数据表,我使用SqlBulkCopy插入数据表到SQL服务器被链接

这里插入SQL服务器2008年,他们分别是:

 QuickLabDump = new DataTable(); 
      QuickLabDump.Columns.Add("Specimen ID", typeof(string)); 
      QuickLabDump.Columns.Add("Client Key", typeof(int)); 
      QuickLabDump.Columns.Add("Outcome", typeof(string)); 
      QuickLabDump.Columns.Add("Medications", typeof(string)); 
      QuickLabDump.Columns.Add("Date Collected", typeof(DateTime)); 
      QuickLabDump.Columns.Add("Time Collected", typeof(TimeSpan)); 
      QuickLabDump.Columns.Add("Date Entered", typeof(DateTime)); 
      QuickLabDump.Columns.Add("Time Entered", typeof(TimeSpan)); 
      QuickLabDump.Columns.Add("Date Completed", typeof(DateTime)); 
      QuickLabDump.Columns.Add("Time Completed", typeof(TimeSpan)); 
      QuickLabDump.Columns.Add("Test Date", typeof(DateTime)); 
      QuickLabDump.Columns.Add("Test Time", typeof(TimeSpan)); 
      QuickLabDump.Columns.Add("Practice Name", typeof(string)); 
      QuickLabDump.Columns.Add("Practice Code", typeof(string)); 
      QuickLabDump.Columns.Add("Client ID", typeof(string)); 
      QuickLabDump.Columns.Add("Requesting Physician", typeof(string)); 
      QuickLabDump.Columns.Add("Other Medications", typeof(string)); 
      QuickLabDump.Columns.Add("Order Comments", typeof(string)); 
      QuickLabDump.Columns.Add("Reference Number", typeof(string)); 
      QuickLabDump.Columns.Add("Order Count", typeof(int));  

      TestResults = new DataTable(); 
      TestResults.Columns.Add("TestName", typeof(String)); 
      TestResults.Columns.Add("Result", typeof(Decimal)); 
      TestResults.Columns.Add("NonNumericResult", typeof(String)); 
      TestResults.Columns.Add("QuickLabDumpid", typeof(int)); 

在数据库上,他们是:

[Specimen ID] [varchar](50) NOT NULL, 
    [Client Key] [int] NOT NULL, 
    [Outcome] [varchar](50) NOT NULL, 
    [Medications] [varchar](max) NULL, 
    [Date Collected] [date] NOT NULL, 
    [Time Collected] [time](0) NOT NULL, 
    [Date Entered] [date] NOT NULL, 
    [Time Entered] [time](0) NOT NULL, 
    [Date Completed] [date] NOT NULL, 
    [Time Completed] [time](0) NOT NULL, 
    [Test Date] [date] NULL, 
    [Test Time] [time](0) NULL, 
    [Practice Name] [varchar](500) NOT NULL, 
    [Practice Code] [varchar](500) NOT NULL, 
    [Client ID] [varchar](500) NULL, 
    [Requesting Physician] [varchar](500) NULL, 
    [Other Medications] [varchar](max) NULL, 
    [Order Comments] [varchar](max) NULL, 
    [Reference Number] [varchar](500) NULL, 
    [Order Count] [int] NOT NULL, 
    [QuickLabDumpID] [int] IDENTITY(1,1) NOT NULL, 

and

[TestName] [varchar](500) NOT NULL, 
    [Result] [decimal](18, 4) NULL, 
    [NonNumericResult] [varchar](100) NULL, 
    [QuickLabDumpID] [int] NOT NULL, 
    [TestResultsID] [int] IDENTITY(1,1) NOT NULL, 

[QuickLabDumpID] [int] IDENTITY(1,1) NOT NULL这一个是自动增量。每插入一行,它都会增加。它也是另一张表上同一列的外键。

问题我没有问题插入记录到任何表;但是,我需要保持参照完整性,以便第一张桌上的QuickLabDumpID与另一张桌上的QuickLabDumpID相匹配。

我不想使用@@identity因为我插入1亿行,这将需要几天!我试过了。

+0

大家请让我知道,如果你不明白我的问题:)我将重新说明 – 2011-12-27 21:03:39

回答

1

我认为你最好的选择是在大容量复制之前SET IDENTITY_INSERT QuickLabDump ON,然后关掉它。

然后,您将需要为每个要插入的行生成id,除非它们已经存在于传入数据集中。

+0

我将不得不禁用约束? – 2011-12-27 21:10:42

+0

如果两个传入数据集都包含相同的值,则不需要。即传入数据中的Qu​​ickLabDump.QuickLabDumpId = 5和TestResults.QuickLabDumpId = 5。如果是这种情况,那么您将首先插入具有正确PK的QuickLabDump数据,然后是将具有正确FK的TestResults。 – 2011-12-27 21:17:31

+0

QuickLabDump.QuickLabDumpId和TestResults.QuickLabDumpId之间存在1:无穷大关系 – 2011-12-27 21:22:33