1

巨大な(1億行)SQLServerテーブルの1列をFLOAT(8)からBIGINTに変換します。フローティングポイントや精度の低下は気にしません。

私はSQLServerを所有していませんが、ローカルでmysqlを使用しているので、この操作によって、データベースの場合と同じようにテーブル全体がコピーされるのではないかと思います。一方、これは暗黙の変換であり、したがって、時間ではなく秒の問題であると読みました。

SQL Serverをセットアップしてローカルで再現するのではなく、かなり時間がかかる可能性があります。答えが単純な「はい、テーブルコピーを実行します」か、「float8からbigintになります。問題ありません」かどうかを尋ねたいと思います。 "。

あなたの助けのためのThx!

4

1 に答える 1

1

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.

于 2011-04-05T13:38:35.950 に答える