我有一个包含字符串列的表。此列应包含当前行的一些text + id。 Id由数据库生成。
例如:行:(Id)12,(MyColumn)'abcde12'
最好的方法是什么?我可以用NHibernate来做,或者只能用SQL来完成吗?
答案 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