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

如何实现视图ID1从False变为True时自动插入ID2/ID3值到新表

实现方案

前提说明

  • 从你提供的dbo前缀语法判断属于SQL Server环境,视图本身是虚拟表不存储数据,无法直接创建触发器,需要在视图View1依赖的底层基表上创建AFTER UPDATE触发器
  • 你原有的查询存在语法冗余和笔误,优化后的ID2、ID3取值语句更简洁的写法如下:
SELECT
    (SELECT Value FROM dbo.View1 WHERE ID = 2) AS ID2_Value,
    (SELECT Value FROM dbo.View1 WHERE ID = 3) AS ID3_Value

完整实现代码

假设你新建的存储表名为TargetTable,结构为(ID INT, Value [对应字段类型]),触发器代码如下:

CREATE TRIGGER trg_CheckID1StateChange
ON 替换为View1依赖的底层基表名 -- 此处替换为视图对应的实际基表名称
AFTER UPDATE
AS
BEGIN
    SET NOCOUNT ON;
    -- 仅检测ID1从False变为True的状态变化
    IF EXISTS(
        SELECT 1 
        FROM deleted d
        INNER JOIN inserted i ON d.ID = i.ID
        WHERE d.ID = 1 
          AND d.Value = 0 -- 若为原生布尔类型替换为FALSE
          AND i.Value = 1 -- 若为原生布尔类型替换为TRUE
    )
    BEGIN
        -- 将当前ID2、ID3的值插入目标表(两行数据,对应ID2、ID3各一行)
        INSERT INTO TargetTable (ID, Value)
        SELECT ID, Value
        FROM dbo.View1
        WHERE ID IN (2,3)

        -- 如果你需要把ID2、ID3的值存为同一行,可替换为下方插入逻辑,需同步调整目标表结构
        /*
        INSERT INTO TargetTable (ID2_Value, ID3_Value)
        SELECT
            (SELECT Value FROM dbo.View1 WHERE ID = 2),
            (SELECT Value FROM dbo.View1 WHERE ID = 3)
        */
    END
END
GO

注意事项

  • 如果View1关联了多个基表,需要在所有可能修改ID1对应Value的基表上都创建该触发器
  • 请根据你实际的Value字段类型调整判断条件的取值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:57:02