It appears to do this one in place.
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
Returns
name leaf_offset max_inrow_length
---- ----------- ----------------
NULL 4 8
d 12 4
v -1 10
c 4 8
The old float
column is still visible but the bigint
column has just taken over the slot. It will need to update every record of course though to make this change.