вставка таблиц данных в сервер SQL, которые связаны - PullRequest
2 голосов
/ 28 декабря 2011

У меня есть две таблицы данных, которые я вставляю в SQL Server 2008, используя SqlBulkCopy

вот они:

      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,

и

[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, потому что я вставляю 100 миллионов строк, и это займет дни !! Я попробовал это.

1 Ответ

1 голос
/ 28 декабря 2011

Я думаю, что ваш лучший вариант - это SET IDENTITY_INSERT QuickLabDump ON перед массовым копированием, а затем отключить его после.присутствует во входящем наборе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...