2011-12-27 52 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

相關問題