我的数据库中有一些计算列。无论如何都要将这些列的类型更改为未计算而不删除并将其数据复制到新的未计算列中?
例如我想改变
[Fee] AS CONVERT([decimal](19,4),(case when [Quantity]=(0) then (0) else [Price]/[Quantity] end)) PERSISTED,
到
[Fee] [decimal](26, 16) NOT NULL,
答案 0 :(得分:2)
确切的答案是"它取决于。" MySQL甚至没有计算列。在SQL Server中,我认为不可能。在Oracle中,可以使用alter table t1 modify fee DECIMAL( m, n )
完成。
但是,即使允许,DBMS也可能在幕后创建新列,将计算值移动到新列,删除计算列并将新列重命名为计算列名。因此,即使没有明确允许转换,您仍然可以完成转换。
答案 1 :(得分:1)
计算列本身不存储数据。 当您尝试在查询中选择列时,它会计算数据并显示给您。此外,您无法将计算列修改为未计算列。
但你可以这样做:
Create Table Temp (ID BigInt, value Computed_Column_DataType)
Go
Insert Temp(ID, Value)
Select ID, ComputedColumnName
From Your_Table
Go
Alter Table Your_Table Drop Column ComputedColumnName
Go
Alter Table Your_Table Add ComputedColumnName Computed_Column_DataType
Go
Update Your_Table Set ComputedColumnName = A.Value From Temp A Where A.ID = YourTable.ID