Hibernate,SQL Server:我如何使用默认值作为另一列的值

时间:2011-02-14 20:37:23

标签: sql sql-server hibernate hibernate-annotations

例如:我有类型为int identity(1,1)的COLUMN_PK列和列COLUMN_NUM pf类型为int,我如何定义COLUMN_NUM的默认值 - COLUMN_PK的值?

因此,如果我有未指定COLUMN_NUM的实体,则将使用COLUMN_PK中的生成值填充它。但是如果指定了COLUMN_NUM,则将使用其值。

5 个答案:

答案 0 :(得分:1)

创建计算的第3列

CREATE TABLE MyTable (
   COLUMN_PK int NOT NULL identity(1,1) ,
   ...
   COLUMN_NUM_internal int NULL,
   COLUMN_NUM AS COALESCE (COLUMN_NUM_internal, COLUMN_PK),
   ...
)

直到INSERT(当然)才知道PK值。但不是之前所以你做了这样的事情或使用触发器来更新COLUMN_NUM。但是,上面的解决方案也适用于后续的UPDATE,没有额外的代码(即UPDATE的另一个触发器)

答案 1 :(得分:0)

使用计算列和标量函数作为默认值。

答案 2 :(得分:0)

我会通过触发器强制执行此操作。

create trigger tr_IU_YourTable on YourTable
for insert,update
as
begin
    update yt
        set column_num = yt.column_pk
        from inserted i
            inner join YourTable yt
                on i.column_pk = yt.column_pk
                    and yt.column_num is null
end
go

答案 3 :(得分:0)

让子表只存储COLUMN_PK和COLUMN_NUM怎么样?仅当指定了COLUMN_NUM值时,此表才会有记录。然后你可以这样做:

CREATE TABLE Parent (COLUMN_PK int NOT NULL identity(1,1), someCol int NOT NULL)
CREATE TABLE Child  (COLUMN_PK int NOT NULL, COLUMN_NUM int NOT NULL)

INSERT INTO Parent (someCol) VALUES (1)
INSERT INTO Parent (someCol) VALUES (2)
INSERT INTO Parent (someCol) VALUES (3)
INSERT INTO Parent (someCol) VALUES (4)
INSERT INTO Parent (someCol) VALUES (5)
INSERT INTO Child VALUES (1, 10)
INSERT INTO Child VALUES (3, 30)
INSERT INTO Child VALUES (5, 50)

SELECT COLUMN_PK,
       CASE WHEN EXISTS (SELECT NULL FROM Child WHERE Child.COLUMN_PK = Parent.COLUMN_PK)
            THEN (SELECT COLUMN_NUM FROM Child WHERE Child.COLUMN_PK = Parent.COLUMN_PK)
            ELSE COLUMN_PK
       END
FROM Parent

答案 4 :(得分:0)

使用NHibernate调用存储过程来插入数据,而不是通过.save方法使用直接插入可以为您提供更多控制。