Sql server 在祖先表中插入数据并从祖先表中检索数据
我正在尝试为先决条件单位创建祖先表。我不知道如何使用SQL脚本为2级、3级等插入数据 我有三张桌子:Sql server 在祖先表中插入数据并从祖先表中检索数据,sql-server,database,hierarchy,ancestor,Sql Server,Database,Hierarchy,Ancestor,我正在尝试为先决条件单位创建祖先表。我不知道如何使用SQL脚本为2级、3级等插入数据 我有三张桌子: 能力单元(能力单元ID:uniqueidentifier,能力单元代码:varchar(20),能力单元标题:varchar(200),描述符:varchar(500)) 先决条件(ID:uniqueidentifier,能力单元\U ID:foreign key references,能力单元\U ID,先决条件\U ID:foreign key references,能力单元\U ID) 先
INSERT INTO Prerequisite_Ancestor (Prerequisite_Ancestor_ID, UoC_ID, Prerequisite_ID, Ancestor_Level)
select newID(), U.Unit_Of_Competency_ID as UoC, P.Prerequisite_ID as Prerequisite, 1 from Prerequisite P
join Unit_Of_Competency U on P.Unit_Of_Competency_ID=U.Unit_Of_Competency_ID
join Unit_Of_Competency U2 on U2.Unit_Of_Competency_ID=P.Prerequisite_ID
如何进入2级、3级。。。使用脚本
提前感谢:)您需要创建另一个用于暂存目的的表,该表将从您设计的web表单收集数据。并在每次提交新表单时截断。暂存表将包含填充所有三个表所需的所有列。查看您现有的列,暂存表看起来好像有以下列:
CREATE TABLE LoadUnitsStg(
StagingID UNIQUEIDENTIFIER NOT NULL PRIMARY KEY DEFAULT NEWID(),
UoC_Code VARCHAR(50),
UoC_Title VARCHAR(200),
UoC_Descriptor VARCHAR(500),
Pre_UoC_Code VARCHAR(50),
Pre_UoC_PreReq VARCHAR(50),
Pre_Pathway VARCHAR(50),
Anc_UoC_Code VARCHAR(50),
Anc_UoC_PreReq VARCHAR(50),
Ancestor_level INT
)
现在将数据从web表单加载到staging表,并使用此查询将数据填充到所需的表中
INSERT INTO Unit_Of_Competency ([UoC_Code],[UoC_Title],[Descriptor])
SELECT DISTINCT(UoC_Code),UoC_Title,UoC_Descriptor FROM LoadUnitsStg stg
WHERE UoC_Code IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Unit_Of_Competency UoC
WHERE UoC.UoC_Code=stg.UoC_Code);
INSERT INTO Prerequisite ([Pathway],[Unit_Of_Competency_ID],[Prerequisite_ID])
SELECT DISTINCT(Pre_Pathway),(Select Unit_Of_Competency_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Pre_UoC_PreReq) FROM LoadUnitsStg stg
WHERE Pre_Pathway IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Prerequisite Pre
WHERE Pre.Pathway=stg.Pre_Pathway);
INSERT INTO Prerequisite_Ancestor ([Ancestor_Level],[UoC_ID],[Prerequisite_ID])
SELECT DISTINCT(Ancestor_level),(Select Unit_Of_Competency_ID as UoC_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_Code),(Select Unit_Of_Competency_ID as Prerequisite_ID from Unit_Of_Competency where UoC_Code like stg.Anc_UoC_PreReq) FROM LoadUnitsStg stg
WHERE Ancestor_level IS NOT NULL AND NOT EXISTS (
SELECT 1 FROM Prerequisite_Ancestor Anc
WHERE Anc.Ancestor_level=stg.Ancestor_level);
加载数据后,只需截断下一组条目的暂存表
希望这对你有帮助