【问题标题】:Insert after trigger not working properly want to Update table in inset after trriger触发器后插入无法正常工作想要在触发器后插入中更新表
【发布时间】:2017-03-15 06:30:38
【问题描述】:

我有一个表并触发正在执行一些计算和更新列的表。

我想更新输入模式字段,希望在表格中明智地设置 0 和 1 天。 我编写了以下代码,但无法正常工作。

WITH CTE AS
(
    SELECT 
        ROW_NUMBER() OVER (ORDER BY Convert(datetime, el.M_Edatetime)) AS ROW,
        el.LogId 
    FROM 
        Essl_logdata el 
    INNER JOIN
        Inserted i ON el.EnrollNo = i.EnrollNo 
                   AND el.M_Edatetime = i.M_Edatetime
    WHERE 
        el.EnrollNo = @INS 
        AND Convert(Date, el.M_Edatetime) = Convert(date, @M_datetime)
)
UPDATE Essl_logdata 
SET InOutMode = '0' 
FROM CTE 
WHERE ROW%2 <> 0 AND Essl_logdata.LogId = CTE.LogId;

WITH CTE AS
(
    SELECT 
        ROW_NUMBER() OVER (ORDER BY COnvert(datetime, el.M_Edatetime)) AS ROW,
        el.LogId 
    FROM 
        Essl_logdata el 
    INNER JOIN
        Inserted i ON el.EnrollNo = i.EnrollNo 
                   AND el.M_Edatetime = i.M_Edatetime 
    WHERE
        el.EnrollNo = @INS 
        AND Convert(Date, el.M_Edatetime) = Convert(date, @M_datetime)
)
UPDATE Essl_logdata 
SET InOutMode = '1' 
FROM CTE 
WHERE ROW%2 = 0 AND Essl_logdata.LogId = CTE.LogId;

预期结果如下。

触发器中的当前查询显示结果如下。

【问题讨论】:

  • 我看不出这两张图片有何不同。当问题似乎集中在“InOutMode”列上时,为什么突出显示“月份”列也不清楚。一些样本数据和预期结果,作为文本,会显着改善这个问题。
  • 抱歉 Inoutmode 列很重要,我想更新该列

标签: sql-server triggers msdn


【解决方案1】:
WITH CTE AS
        (
            SELECT ROW_NUMBER() OVER(PARTITION BY COnvert(date,M_Edatetime),EnrollNo ORDER BY COnvert(datetime,M_Edatetime))AS ROW,Logid,M_Edatetime,EnrollNo FROM Essl_logdata  group by M_Edatetime,Logid,EnrollNo
        )           
        Update Essl_logdata set InOutMode = '1' FROM CTE WHERE ROW%2 = 0 and Essl_logdata.LogId = CTE.LogId;

WITH CTE AS
        (
            SELECT ROW_NUMBER() OVER(PARTITION BY COnvert(date,M_Edatetime),EnrollNo ORDER BY COnvert(datetime,M_Edatetime))AS ROW,Logid,M_Edatetime,EnrollNo FROM Essl_logdata  group by M_Edatetime,Logid,EnrollNo
        )       
        Update Essl_logdata set InOutMode = '0' FROM CTE WHERE ROW%2 <> 0 and Essl_logdata.LogId = CTE.LogId;

我找到了这个解决方法

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2016-10-13
    • 1970-01-01
    • 2020-06-24
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多