2015-08-25 2 views
2

У меня есть эти 3 таблицы:каскадных данных вставка

CREATE TABLE tblPrimary(
Id INT IDENTITY(1,1) NOT NULL, 
SampleID VARCHAR(8) 
PRIMARY KEY (Id) 
) 

CREATE TABLE tblSecondary(
PrimaryId INT NOT NULL, 
SampleName VARCHAR(50) NULL 
) 

CREATE TABLE tblSample(
SampleId VARCHAR(8) NOT NULL, 
Name VARCHAR(50) NULL 
PRIMARY KEY (SampleId) 
) 

Некоторые образцы данных для tblSample

INSERT INTO tblSample VALUES ('A-1101', 'The CP 1014') 
INSERT INTO tblSample VALUES ('A-1102', 'The NT 1014') 
INSERT INTO tblSample VALUES ('A-1103', 'The LO 1014') 
INSERT INTO tblSample VALUES ('A-1104', 'The AE 1014') 
INSERT INTO tblSample VALUES ('A-1105', 'The PW 1014') 
INSERT INTO tblSample VALUES ('A-1106', 'The QW 1014') 

Я в настоящее время вставки данных из tblSample в tblPrimary с помощью следующего запроса:

INSERT INTO tblPrimary 
SELECT s.SampleID FROM tblSample s 
LEFT JOIN tblPrimary p on s.SampleId = p.SampleID 
WHERE s.SampleId NOT IN (SELECT SampleID FROM tblPrimary) 

Теперь я хочу вставить данные в tblSecondary также во время ввода данных в tblPrimary.

  • Вновь образованный `tblPrimary.PrimaryId` будет вставлен в колонку tblSecondary.PrimiaryId`
  • ` tblSample.Name` будет вставлен в `колонке tblSecondary.SampleName`
  • Это будет каскадный процесс вставки данных

Что мне нужно сделать после того, как этот запрос вставит выше, чтобы это было сделано? Я хочу tblSecondary результат будет следующим:

enter image description here

ответ

1

Вам понадобится табличную переменную и условие вывода для этого что-то вроде ....

DECLARE @NewIds (ID INT, SampleID varchar(8)); 


insert into tblPrimary(SampleID) 
OUTPUT inserted.ID, inserted.SampleID INTO @NewIds (ID,SampleID) 
select s.SampleID 
from tblSample s 
left join tblPrimary p on s.SampleId = p.SampleID 
where s.SampleId not in (select SampleID from tblPrimary) 


-- Now insert rows into tblSecondary table 

INSERT INTO tblSecondary(PrimaryId, SampleName) 
SELECT n.ID , S.Name 
FROM tblSample s 
INNER JOIN @NewIds n ON s.SampleId = n.SampleID 
+0

коррекция для вас «DECLARE @ Таблица NewIds (ID INT, SampleID varchar (50)); – LazyLoading

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