You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017边表插入问题:导入数据时遇障碍

解决SQL Server 2017图数据库边表导入问题

嘿,我来帮你搞定这个边表导入的麻烦!你说导入节点表没问题,但从kontomappingDetaljeret表导入边表卡壳了——核心问题其实是边表需要关联节点表的系统生成$node_id,而不是直接用你的业务字段(kontoNummer/refNr)。我给你一步步拆解:

第一步:确认边表的正确创建

首先得确保你的边表关联了对应节点表,比如假设你有两个节点表:KontoNodes(存储kontoNummer节点)和RefNrNodes(存储refNr节点),那边表得这么建:

-- 创建边表,指定连接的节点表方向(根据你的业务关系调整方向)
CREATE TABLE KontoToRefNr (
    -- 这里可以加额外的关系属性,比如创建时间之类的,按需添加
    CONSTRAINT EC_KontoToRefNr CONNECTION (KontoNodes TO RefNrNodes)
) AS EDGE;

注意CONNECTION里的顺序很重要,对应边的起点($from_id)和终点($to_id)。

第二步:关联节点表插入边数据

接下来就是从kontomappingDetaljeret里匹配两个节点的$node_id,再插入边表:

INSERT INTO KontoToRefNr ($from_id, $to_id)
SELECT
    kn.$node_id AS $from_id,
    rn.$node_id AS $to_id
FROM kontomappingDetaljeret kmd
-- 匹配kontoNummer对应的节点
JOIN KontoNodes kn ON kmd.kontoNummer = kn.kontoNummer
-- 匹配refNr对应的节点
JOIN RefNrNodes rn ON kmd.refNr = rn.refNr;

常见坑点排查

如果执行还是有问题,大概率是以下几个原因:

  • 数据不匹配:kontomappingDetaljeret里的某些kontoNummer/refNr在对应的节点表里找不到。可以用LEFT JOIN排查:
    SELECT kmd.*
    FROM kontomappingDetaljeret kmd
    LEFT JOIN KontoNodes kn ON kmd.kontoNummer = kn.kontoNummer
    LEFT JOIN RefNrNodes rn ON kmd.refNr = rn.refNr
    WHERE kn.$node_id IS NULL OR rn.$node_id IS NULL;
    
    这些就是无法匹配节点的记录,要么补全节点数据,要么过滤掉。
  • 节点重复:如果节点表中同一个kontoNummer/refNr存在多条记录,会导致生成多条重复边。可以先给节点表的业务字段加唯一约束,或者插入边时加DISTINCT:
    INSERT INTO KontoToRefNr ($from_id, $to_id)
    SELECT DISTINCT
        kn.$node_id,
        rn.$node_id
    FROM kontomappingDetaljeret kmd
    JOIN KontoNodes kn ON kmd.kontoNummer = kn.kontoNummer
    JOIN RefNrNodes rn ON kmd.refNr = rn.refNr;
    
  • 连接方向搞反:如果你的业务关系是refNr指向kontoNummer,那CONNECTION就得写成(RefNrNodes TO KontoNodes),对应插入时$from_id和$to_id也要调换。

如果还有具体的报错信息或者表结构细节,随时说,我再帮你调整!

内容的提问来源于stack exchange,提问作者Henrik Poulsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:59:45