다른 테이블의 삽입을 동적으로 수행하려는 경우 INSERT 및 SELECT 문의 조합으로이 작업을 수행 할 수 있습니다. 이것이 당신이 무엇인지 확신 할 수 없습니다.
예컨대 :
INSERT INTO Person_Archive(Id,Name, CountryId)
SELECT Id, Name, CountryId FROM Person
WHERE CreatedAt BETWEEN '2016-01-25 00:00:00' AND '2016-12-25 23:59:59'
이 하나 어렵습니다. 아카이브에 존재하지 않는 국가 만 추가하려고합니다. 물론 여기서 고양이를 피하는 더 많은 방법이 있습니다. 이것은 접근법을 분명히 말하고있는 것입니다.
INSERT INTO Country_Archive(Id, Name) -- INSERT INTO THE archive
SELECT Country.CountryId, Country.Name FROM Person -- SELECT rows
JOIN Country ON CountryID.Id = Person.CountryId -- Join on Country to get Country Name
WHERE CreatedAt BETWEEN '2016-01-25 00:00:00' AND '2016-12-25 23:59:59'
-- Criteria for query
AND (SELECT COUNT(*) FROM Country_Archive WHERE Country_Archive.Id = Person.CountryID) = 0)
-- This checks to see if CountryId hasn't already been added
GROUP BY Country.CountryId, Country.Name -- This get unique records only, i.e. if multiple users have same country.
동적 생성을위한 FK 열은 무엇입니까? 또는 생성 시간에 알려져 있습니까? 어쨌든, 당신은 select (하나의 결과에서 한 행에 하나의 삽입)에서 문자열로 구문을 생성 한 다음 sp_executesql을 사용하여 생성 된 문자열을 실행할 수 있습니다. 그것이 당신이 달성하기를 원하는 것입니까? –
동적 SQL을 사용하는 이유가 있습니까? 나는 당신이 그것없이 그것을 할 수 있다고 생각합니다. – Yatrix
예를 들어, 내가 선택한 경우 : 'SELECT ID, 이름, CountryId 사람 사이에서 만든 사람 '2016-01-25 00:00:00'및 '2016-12-25 23 : 59 : 59'' 생성 된 스크립트는해야한다 : 'INSERT INTO 국가 (ID, 이름) VALUES (45, '이탈리아') INSERT INTO 국가 (ID, 이름) VALUES (46, '프랑스') INSERT INTO 사람 (ID, 이름, CountryId) VALUES (34, John, 45) INSERT INTO Person (ID, 이름, CountryId) VALUES (35, 클라우디아, 46) INSERT INTO Person 45)' FK에 대해서도 마찬가지입니다. –