为计算列添加具有强制DECIMAL类型的ADD COLUMN

时间:2019-06-18 12:51:28

标签: sql sql-server decimal alter-table

我正在尝试更改a以添加新的计算列,但最终结果是不带...的十进制(???)

我想出了

ALTER TABLE
  dbo.transaction_payment
ADD
  total_amount AS CAST(
    (CAST(amount_transac AS decimal(12, 2))) + (CAST(amount_tip AS decimal(12, 2))) AS decimal(12, 2)
  )

但是引擎告诉我我出错了。我将所有值都强制转换为没有隐式类型并失去精度,然后强制转换最终结果。

2 个答案:

答案 0 :(得分:1)

您不能“更改”计算列,所以:

ALTER TABLE dbo.transaction_payment
    ADD total_amount as (CONVERT(decimal(12, 2), amount_transac + amount_tip));

如果已经存在,请先将其删除:

ALTER TABLE dbo.transaction_payment
    DROP COLUMN IF EXISTS total_amount;

答案 1 :(得分:0)

假定您正在使用Microsoft SQL Server(因为代码中包含dbo。),则应更新该列,而不要更改它。您似乎在总和上缺少了一组括号:

UPDATE dbo.transaction_payment
SET total_amount = CAST((CAST(amount_transac AS DECIMAL(12,2))) + (CAST(amount_tip AS decimal(12,2)))AS decimal(12,2))