【发布时间】:2018-03-15 20:40:18
【问题描述】:
我想更改一个表并添加一个列,该列是其他两列的总和,当我添加新数据时,此列是自动计算的。
【问题讨论】:
标签: sql-server
我想更改一个表并添加一个列,该列是其他两列的总和,当我添加新数据时,此列是自动计算的。
【问题讨论】:
标签: sql-server
计算列规范的语法如下:
column-name AS formula
如果要将列值存储在数据库中,则应在语法中添加 PERSISTED 关键字,如下所示:
column-name AS formula PERSISTED
你没有提到一个例子,但如果你想添加列“sumOfAAndB”来计算 A 和 B 的总和,你的语法看起来像
ALTER TABLE tblExample ADD sumOfAAndB AS A + B
希望对您有所帮助。
【讨论】:
PERSISTED 添加到您最后的ALTER TABLE.... 语句中。否则,将对该表中的每个 SELECT 重新计算总和 - 效率不高...
我建议不要将此列添加到表中,而是使用View 来计算额外的列,然后从中读取。
这里有一个关于如何在这里创建视图的教程:
http://odetocode.com/Articles/299.aspx
您的视图查询类似于:
SELECT
ColumnA, ColumnB, (ColumnA+ColumnB) as ColumnC
FROM
[TableName]
【讨论】:
ALTER TABLE my_table ADD my_column AS (column1+column2) 就是这样,伙计 thx ;)
my_column 值将不会更新。
my_column 列都会自动更新,只是删除(column1+column2) 中的括号我忘了说
您可以使用视图,但如果您不想在每次访问视图时产生计算值的成本,您可能希望使用 PERSISTED 计算值。
例如
CREATE TABLE T1 (
a INT,
b INT,
operator CHAR,
c AS CASE operator
WHEN '+' THEN a+b
WHEN '-' THEN a-b
ELSE a*b
END
PERSISTED
) ;
如果您使用的是 SQL Server,请参阅SQL docs。
【讨论】:
创建新表时如何创建计算列:
CREATE TABLE PRODUCT
(
WORKORDERID INT NULL,
ORDERQTY INT NULL,
[ORDERVOL] AS CAST
(
CASE WHEN ORDERQTY < 10 THEN 'SINGLE DIGIT' WHEN ORDERQTY >=10 AND ORDERQTY < 100 THEN 'DOUBLE DIGIT'
WHEN ORDERQTY >=100 AND ORDERQTY < 1000 THEN 'THREE DIGIT' ELSE 'SUPER LARGE' END AS NVARCHAR(100)
)
)
INSERT INTO PRODUCT VALUES (1,1),(2,-1),(3,11)
SELECT * FROM PRODUCT
【讨论】:
UPDATE table_name SET total = mark1+mark2+mark3;
首先认为你可以将所有数据插入到表中,然后你可以像这个表格一样更新表。
//我希望对你有帮助
【讨论】: