我们想在一个巨大的(100 Mio.行)SQL Server 表中将一列从 FLOAT(8) 转换为 BIGINT。我们不关心浮点数和精度损失。
由于我没有 SQL Server,但在本地使用 mysql,我想知道此操作是否会导致整个表副本,就像它对我的数据库所做的那样!?另一方面,我读到这将是一种隐式转换,因此只需几秒钟而不是几小时。
而不是设置一个 SQL Server 并在本地复制它可能需要很长时间”。
谢谢你的帮助!
我们想在一个巨大的(100 Mio.行)SQL Server 表中将一列从 FLOAT(8) 转换为 BIGINT。我们不关心浮点数和精度损失。
由于我没有 SQL Server,但在本地使用 mysql,我想知道此操作是否会导致整个表副本,就像它对我的数据库所做的那样!?另一方面,我读到这将是一种隐式转换,因此只需几秒钟而不是几小时。
而不是设置一个 SQL Server 并在本地复制它可能需要很长时间”。
谢谢你的帮助!
它似乎做到了这一点。
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
列刚刚接管了插槽。当然,它需要更新每条记录才能进行此更改。