Cod*_*rKK 6 sql t-sql sql-server
CREATE TABLE [dbo].[TES_Tracks](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Rate] [float] NULL,
[TOL] [datetime] NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
我想将rate列更改为十进制(28,6).我已经在浮动格式的表中有很多数据.我害怕任何数据丢失.我应该怎么做?
bsi*_*vel 10
未经测试,但他可能值得一试......
ALTER TABLE [dbo].[TES_Tracks] ADD [RateNew] DECIMAL(28,6);
UPDATE [dbo].[TES_Tracks] set RateNew = Cast(Rate as Decimal(28,6));
Run Code Online (Sandbox Code Playgroud)
由于sql server隐式处理十进制vs浮点数,如果你有数据丢失,这应该得到行.
Select * From [dbo].[TES_Tracks] where Rate <> RateNew;
Run Code Online (Sandbox Code Playgroud)
如果你满意的话......
ALTER TABLE [dbo].[TES_Tracks] DROP COLUMN [Rate];
Run Code Online (Sandbox Code Playgroud)
然后将RateNew列重命名为Rate
EXEC sp_RENAME 'TES_Tracks.RateNew' , 'Rate', 'COLUMN'
Run Code Online (Sandbox Code Playgroud)
您只需更新Rate数据,然后更改列数据类型即可.
首先,您可以使用以下查询验证CAST(仅适用于小数部分<0.000001的行)
SELECT
[Rate],
CAST([Rate] as decimal(28, 6)) Rate_decimal
FROM [dbo].[TES_Tracks]
WHERE [Rate] - FLOOR([Rate]) < 0.000001;
Run Code Online (Sandbox Code Playgroud)
一旦验证了CAST表达式是否正确,就可以使用UPDATE语句应用它.同样,您只能更新那些具有[Rate] - FLOOR([Rate])良好性能的行.
UPDATE [dbo].[TES_Tracks]
SET [Rate] = CAST([Rate] as decimal(28, 6))
WHERE [Rate] - FLOOR([Rate]) < 0.000001;
ALTER TABLE [dbo].[TES_Tracks] ALTER COLUMN [Rate] DECIMAL(28,6);
Run Code Online (Sandbox Code Playgroud)
这样,您就不需要删除Rate列.
| 归档时间: |
|
| 查看次数: |
16642 次 |
| 最近记录: |