复杂列。(Id + string)

时间:2012-02-22 05:40:37

标签: sql nhibernate

我有一个包含字符串列的表。此列应包含当前行的一些text + id。 Id由数据库生成。

例如:行:(Id)12,(MyColumn)'abcde12'

最好的方法是什么?我可以用NHibernate来做,或者只能用SQL来完成吗?

3 个答案:

答案 0 :(得分:0)

我知道这确实可以直接回答你的问题但是这个方法呢:

public virtual string MyCalculatedField {
  get { return MyColumn + Id.ToString(); }
}

通过这样做,您不必在DB生成您的ID后进行双重更新。

答案 1 :(得分:0)

根据“数据库生成的ID”的含义,您可能需要将新记录的插入分为两个步骤。

如果您的id是由MySQL的自动增量生成的,它将如下所示:

Insert into your_table (some_text_col)
Values ('some_text')

这会让你

ID   some_text_col   combined
 1   'some_text'      Null

您可以使用

更新该列
Update your_table
set combined = concat(some_text_col, id)
where id = LAST_INSERT_ID()

注意:这应该适用于MySQL,但我没有测试它。它可以很容易地适应其他DBMS。您可能需要考虑使用触发器(如果您的数据库支持它们)来自动执行Update

答案 2 :(得分:0)

为什么要将12存储在两个地方?

12存储在ID列中,将abcde存储在MyColumn中。

当您想要检索时,您可以将这两个值连接起来或将它们作为单独的列检索,无论应用程序需要什么。或者您可以使用View

CREATE VIEW Extra AS
( SELECT ID
       , MyColumn
       , CONCAT(ID, MyColumn) AS ExtraColumn
  FROM TableX
) ;

然后你可以使用:

SELECT ExtraColumn FROM Extra

或:

SELECT * FROM Extra