Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在祖先表中插入数据并从祖先表中检索数据_Sql Server_Database_Hierarchy_Ancestor - Fatal编程技术网

Sql server 在祖先表中插入数据并从祖先表中检索数据

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) 先

我正在尝试为先决条件单位创建祖先表。我不知道如何使用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)
  • 先决条件祖先(先决条件祖先ID、能力单元ID:外键引用能力单元ID、先决条件ID:外键引用能力单元ID)
  • 能力单元表包含以下数据:

    先决条件表包含以下数据:

    在加入能力和先决条件单元时,我们得到以下输出:

    我需要填充Prerequisite_祖先表;我只住到一级

    我需要为级别2、3、4填充祖先表 比如说,

  • 贝叶斯定理| |除法| | 2
  • 概率|数学| 2
  • 贝叶斯定理| |数学| | 3
  • 我在前提条件_祖先表中输入祖先_级别1的方式是使用以下脚本:

    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);
    
    加载数据后,只需截断下一组条目的暂存表

    希望这对你有帮助