在SQL Server中,将float列转换为bigint列是否会导致整个表的复制?



我们想转换成一个巨大的(100米)。SQL Server表一列从FLOAT(8)到BIGINT。我们不关心浮点数和失去精度。

因为我不拥有SQL Server,但在本地使用mysql,我想知道这个操作是否会导致整个表副本,因为它会与我的数据库做!另一方面,我读到这将是一个隐式转换,因此它将是秒而不是小时的问题。

而不是设置一个SQL Server并在本地复制它,这可能需要相当多的时间,我想问你,如果答案是一个简单的"是的,它做一个表复制",或"float8到bigint,不,这不是一个问题"。

谢谢你的帮助!

它似乎已经完成了。

CREATE TABLE T
(
c float,
d int,
v varchar(10)
)
INSERT INTO T VALUES (1,1,'')

alter table T alter column c bigint
SELECT  sc.name, sipc.leaf_offset, sipc.max_inrow_length
FROM    sys.partitions sp
        JOIN sys.system_internals_partition_columns sipc
             ON sp.partition_id = sipc.partition_id
     left   JOIN sys.columns sc
             ON sc.column_id = sipc.partition_column_id AND sc.object_id = sp.object_id
WHERE   sp.object_id = OBJECT_ID('dbo.T') 
DROP TABLE T

返回
name leaf_offset max_inrow_length
---- ----------- ----------------
NULL 4           8
d    12          4
v    -1          10
c    4           8

旧的float列仍然可见,但bigint列刚刚占据了槽位。当然,它需要更新每条记录来进行此更改。

最新更新