2013-11-22 1 views
0

мне нужно периодически вставлять новые данные в двух таблиц:Обновления колонки в таблице А, со ссылкой на последнюю запись в таблице В, в SQL Server

таблицы mstr_project, где каждый раз, когда я вставить одну записи проекта (1 ряд). У меня есть столбец идентификатора Project_ID, поэтому каждый раз, когда вставлена ​​новая запись проекта, автоматически генерируется идентификатор проекта.

Таблица tbl_ProjectData, где каждый раз, когда я вставляю 200 строк новых данных для нового проекта, я добавил в таблицу mstr_project.

Мой вопрос - как я могу обновить ProjectID колонку в tbl_ProjectData каждый раз, так что новые записи принимают на вновь созданном Project_ID в таблице mstr_project? Это означает, что каждый раз 200 новых записей в таблице tbl_ProjectData будут принимать одинаковые ProjectID, которые сгенерированы в таблице mstr_project.

ответ

0

Просто используйте Scope_Identity:

DECLARE @ProjectID int; 
INSERT dbo.mstr_project (Name) VALUES ('My New Project'); 
SET @ProjectID = Scope_Identity(); 

INSERT dbo.tbl_ProjectData (ProjectID, Value) 
SELECT @ProjectID, Value 
FROM #ProjectDataValues; 

Вы можете также захватить вставленное значение с помощью OUTPUT дизъюнкцию (SQL Server 2005 и выше):

CREATE TABLE #NewProjectIDs (
    ProjectID int NOT NULL PRIMARY KEY CLUSTERED 
); 

INSERT dbo.mstr_project (Name) 
OUTPUT ProjectID INTO #NewProjectIDs 
SELECT 'My New Project'; 

INSERT dbo.tbl_ProjectData (ProjectID, Value) 
SELECT N.ProjectID, V.Value 
FROM 
    #NewProjectIDs 
    CROSS JOIN #ProjectDataValues V; 

Для второго фрагмента кода, обратите внимание на сколько строк вы вставляете в таблицу проектов - если вы вставляете сразу несколько, вам нужно будет сделать что-то другое, чтобы выбрать правильный проект для каждой строки, которая входит в таблицу ProjectData.

Примечание: Пожалуйста, прекратите называть ваши таблицы «tbl_» в качестве префикса. Когда-нибудь ты избавишься от кого-то от убийственных снов.

Смежные вопросы