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

将两表JOIN关联数据存入临时表执行CRUD及DateTime转换问题咨询

问题解决

1. DateTime字段转换报错修复

你遇到的报错大概率是两个原因:一是VaccinationDate字段存在NULL值,直接调用ToString会抛出空引用异常;二是你的查询语句中同时查询了p.CNIC和pv.cnic两个同名字段,取数时可能列索引错位导致类型匹配失败。
修复代码如下:

// 先给查询字段加别名避免重名冲突,修改你的query为:
string query = "select p.CNIC, p.Name, pv.VaccinationName, pv.VaccinationDate, pv.CenterAddress from Patient as p join PatientVaccines as pv on p.CNIC = pv.cnic";

// 赋值时增加空值判断
if (!dr.IsNull("VaccinationDate"))
{
    dmod.VaccinationDate = Convert.ToDateTime(dr["VaccinationDate"]).ToString("yyyy-MM-dd HH:mm:ss");
}
else
{
    dmod.VaccinationDate = string.Empty; // 也可替换为你需要的默认值
}

2. 支持源表同步CRUD的临时表实现方案

SQL Server的临时表本身不具备自动同步源表的能力,你需要配合触发器或者C#端的自定义CRUD逻辑实现双向同步,两种可行方案如下:

方案1:SQL侧创建带触发器的临时表

  • 第一步:创建会话/全局临时表并导入关联数据
-- #开头为会话临时表,仅当前数据库连接可见;##开头为全局临时表,所有连接可见
CREATE TABLE #PatientVaccineTemp (
    CNIC VARCHAR(20) PRIMARY KEY,
    Name NVARCHAR(50) NOT NULL,
    VaccinationName NVARCHAR(100) NOT NULL,
    VaccinationDate DATETIME NULL,
    CenterAddress NVARCHAR(200) NULL
)
-- 写入两张源表的关联数据
INSERT INTO #PatientVaccineTemp
SELECT p.CNIC, p.Name, pv.VaccinationName, pv.VaccinationDate, pv.CenterAddress 
FROM Patient as p JOIN PatientVaccines as pv ON p.CNIC = pv.cnic
  • 第二步:给临时表创建触发器,操作临时表时自动同步源表,以更新触发器为例:
CREATE TRIGGER trg_TempUpdateSync
ON #PatientVaccineTemp
AFTER UPDATE
AS
BEGIN
    -- 同步更新Patient表
    UPDATE Patient
    SET Name = i.Name
    FROM Patient p
    JOIN inserted i ON p.CNIC = i.CNIC
    -- 同步更新PatientVaccines表
    UPDATE PatientVaccines
    SET VaccinationName = i.VaccinationName,
        VaccinationDate = i.VaccinationDate,
        CenterAddress = i.CenterAddress
    FROM PatientVaccines pv
    JOIN inserted i ON pv.cnic = i.CNIC
END

按照相同逻辑编写INSERT、DELETE触发器即可实现全操作同步。

方案2:C#侧用DataTable模拟临时表

该方案更适合ASP.NET场景,无需维护临时表的会话生命周期,直接给SqlDataAdapter配置自定义的InsertCommand、UpdateCommand、DeleteCommand,命令中写入同时更新两张源表的SQL逻辑,调用sda.Update(dt)时即可自动完成源表同步。


内容的提问来源于stack exchange,提问作者Heart Break Kid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:04