【问题标题】:Inserting primary key value into other column of same record in a SQL table将主键值插入 SQL 表中同一记录的其他列
【发布时间】:2014-08-09 02:16:59
【问题描述】:

我正在使用一个数据库应用程序,它通过 Asp.Net MVC 中的网页将记录添加到表中。

我有一张表Terms 有以下列'

Id
TermName
TermOrder

我正在从网页中插入 TermName,我希望 TermOrderId 具有相同的值。 例如,我在表中插入了一个 TermName“Fall”,它默认使用身份规范添加 Id,比如 10,但将 0 添加到 TermOrder,但我希望 Id 值 10 也出现在 TermOrder 中。

我正在使用淘汰赛Js和Odata插入记录

淘汰赛Js

self.addTerm = function (term) {
        var payload = {TermName: this.Term()};
        $.ajax({
            url: '/odata/Terms',
            type: 'POST',
            data: JSON.stringify(payload),
            contentType: 'application/json',
            dataType: 'json'

        });

    }

控制器

protected override Term CreateEntity(Term entity)
        {
            var newTerm = db.Terms.Find(entity.Id);
            if (newTerm == null)
            {
                newTerm = db.Terms.Add(entity);
                entity.TermOrder = entity.Id;
            }
            else
            {
                newTerm = db.Terms.Add(newTerm);
                entity.TermOrder = entity.Id;
            }

            db.SaveChanges();   

            return newTerm;
        }

我可以知道更好的处理方法吗?

【问题讨论】:

    标签: sql-server asp.net-mvc-4 knockout.js odata


    【解决方案1】:

    一种解决方案是使用触发器:

    CREATE TRIGGER trgI_Terms_UpdateTermOrder
    ON dbo.Terms
    AFTER INSERT
    AS
    BEGIN
        UPDATE  t
        SET     TermOrder = i.Id -- This will copy ID values in TermOrder
        FROM    dbo.Terms t INNER JOIN inserted i ON t.Id = I.Id
    END;
    GO
    

    【讨论】:

    • 谢谢,我该怎么做,但不是将 Id 插入 TermOrder 我想要 Min(TermOrder)-1,因为我不能在 SET 中使用聚合函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-25
    • 2019-05-25
    • 2018-05-24
    相关资源
    最近更新 更多