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

使用Webmatrix、Bootstrap、SQL实现两表插入时外键ID保持一致的求助

问题根因

  • 两张表的插入操作没有做外键关联,你插入Storage表时没有给外键字段carID赋值,两条记录完全独立,FULL OUTER JOIN时自然会返回两条字段分别为空的不关联记录
  • 插入操作用错了方法:QueryValue是用来获取查询结果的单个返回值的,执行INSERT/UPDATE/DELETE这类非查询SQL需要用Execute方法
  • 现有代码存在语法错误,第一个插入语句的调用括号、结尾符号都不完整
  • GetLastInsertID()的调用时机不对,必须在执行INSERT语句之后立刻调用,才能拿到刚插入记录的自增主键ID

修正后的代码

@{  
    var db = Database.Open("DB Name");
    if (IsPost)
    {
        // 先插入车辆表,获取刚生成的自增carID
        var inCarSql = "INSERT INTO Cars (carName, modelName) VALUES (@0, @1)";
        db.Execute(inCarSql, Request.Form["carName"], Request.Form["modelName"]);
        // 立刻获取刚插入的车辆自增ID
        var carId = db.GetLastInsertId();

        // 再插入仓储表,绑定刚才拿到的carID建立关联
        var inSql = "INSERT INTO Storage (carID, location, GPS) VALUES (@0, @1, @2)";
        db.Execute(inSql, carId, Request.Form["location"], Request.Form["gps"]);
    }
}

额外注意点

  • 你写的关联查询SQL存在笔误,JOIN条件里的表名写错了,正确语句为:SELECT * From Storage FULL OUTER JOIN Cars ON Storage.carID = Cars.carID
  • 建议新增事务包裹两个插入操作,避免其中一个插入失败产生脏数据
  • 入库前建议对表单参数做非空、合法性校验,避免非法数据写入数据库

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 02:36:03