【问题标题】:Creating a column which should be auto generated by concatenating values in other columns in a table创建应该通过连接表中其他列中的值来自动生成的列
【发布时间】:2011-07-29 17:29:30
【问题描述】:

我在 SQL 数据库中获得了一个包含四列的表:ID、Comp_Id、Cont_Id 和 Comp_Cont_Id。 ID、Comp_Id、Cont_Id 列中的值是手动输入的,Comp_Cont_Id 列中的值将通过连接 ID、Comp_Id、Cont_Id 列中的值自动生成。

比如我们在(ID, Comp_Id, Cont_Id)中分别输入(201, 301, 401),那么表的Comp_Cont_Id列应该会自动生成201_301_401这个值。

有没有办法实现它?如果有请告诉我。

【问题讨论】:

  • 您使用的是什么数据库?例如MS SQL、MySQL。

标签: sql database-design concatenation autogeneratecolumn


【解决方案1】:

MS SQL 支持计算列,语法在 similar question 中给出。

DROP TABLE test99
CREATE TABLE test99 (
    id int,  
    comp_id int,  
    cont_id int,
    comp_cont_id AS cast(id AS varchar) + '_' + cast(comp_id AS varchar) + '_' + cast(cont_id AS varchar)
) 

INSERT INTO test99 (id, comp_id, cont_id)
VALUES (201, 301, 401)

SELECT * FROM test99

【讨论】:

  • 正确的(SQL Server)术语是计算列。 “派生列”通常是与选择语句相关的短语,指的是出现在结果集中但未出现在基表中的列 - 一个类似但不相交的概念
  • 哎呀,答案已编辑(参考msdn
【解决方案2】:

您是使用 PHP 还是 ASP.NET 来输入值?如果用户直接键入表格,您可以尝试使用触发器来设置最后一个值。

但是,Comp_Cont_Id 是所谓的派生字段。它的值取决于其他字段。派生字段的示例是记录总数、平均价格等。最好动态地提出字段,而不是存储它。当然,也有例外,比如当性能很重要时。

【讨论】:

  • +1 这感觉像是最适合动态生成的东西。
  • 是的。但是动态生成不应该在我们的项目中用于性能目的。非常感谢您的帮助。
猜你喜欢
  • 2023-04-07
  • 2016-03-05
  • 1970-01-01
  • 2022-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多