Приводит ли преобразование плавающего столбца к столбцу bigint к полной копии таблицы в SQL Server? - PullRequest
1 голос
/ 05 апреля 2011

мы хотим преобразовать в огромную (100 млн. Строк) таблицу SQL Server один столбец из FLOAT (8) в BIGINT.Нас не волнуют плавающие точки и потеря точности.

Поскольку я не являюсь владельцем SQL Server, но использую mysql локально, мне интересно, приведет ли эта операция к полной копии таблицы, как это было бы с моей базой данных!?С другой стороны, я прочитал, что это будет неявное преобразование, и, следовательно, это будет считаться секундами, а не часами.

Вместо настройки SQL Server и его локального воспроизведения, что может занять довольно много времени.хотел бы спросить вас, является ли ответ простым «да, он делает копию таблицы», или «float8 to bigint, нет, это не проблема».

Спасибо за помощь!

1 Ответ

1 голос
/ 05 апреля 2011

Похоже, что сделать это на месте.

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 только что занял это место. Конечно, для этого потребуется обновить каждую запись.

...