Sql server 将float列转换为bigint列是否会导致SQL Server中的整个表拷贝?

Sql server 将float列转换为bigint列是否会导致SQL Server中的整个表拷贝?,sql-server,floating-point,bigint,Sql Server,Floating Point,Bigint,我们希望在一个巨大的(1亿行)SQLServer表中,将一列从FLOAT(8)转换为BIGINT。我们不关心浮点和精度损失 由于我没有SQL Server,但在本地使用mysql,我想知道这个操作是否会像处理我的数据库一样产生一个完整的表副本!?另一方面,我读到这将是一个隐式转换,因此这将是几秒钟而不是几个小时的问题 与其设置SQL Server并在本地复制它(这可能需要花费很多时间),我想问您答案是简单的“是的,它有表拷贝”,还是“float8到bigint,不,这不是问题” 谢谢你的帮助 它

我们希望在一个巨大的(1亿行)SQLServer表中,将一列从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
列刚刚接管了插槽。当然,要进行此更改,它需要更新每一条记录。

这条记录似乎已经到位

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
列刚刚接管了插槽。当然,要进行此更改,它需要更新每个记录。

您是通过代码还是通过ssms的ui进行转换?您是通过代码还是通过ssms的ui进行转换?谢谢您的回答。这正是我需要的信息!你知道这是从哪个版本开始的吗?我们在MSSQL 2008中复制了这种行为,但仍然正式支持MSSQL 2000。如果这是一个问题,我们仍然有一个问题。谢谢你的回答。这正是我需要的信息!你知道这是从哪个版本开始的吗?我们在MSSQL 2008中复制了这种行为,但仍然正式支持MSSQL 2000。如果这是一个问题,我们仍然有一个问题。