Конвертировать INT в BIGINT в SQL Server - PullRequest
4 голосов
/ 28 ноября 2011

SQL 2005, 600 000 000 строк.

У меня есть таблица с именем Location, в настоящее время использующая тип данных INT в столбце идентификатора PK LocationID. Я хотел бы попытаться преобразовать этот тип данных в BIGINT.

Следующий скрипт, который, я думаю, должен помочь разрешить вставку в столбец PK, но я не уверен, как выполнить форму здесь.

SET IDENTITY_INSERT LOCATION ON /*allows insert into the identity column*/`

SET IDENTITY_INSERT LOCATION OFF /*Returns the identity column to initial state*/`

Сценарий создания таблицы местоположения ниже:

CREATE TABLE [dbo].[Location](
    [LocationID] [int] IDENTITY(1,1) NOT NULL,
    [JourneyID] [int] NULL,
    [DeviceID] [int] NOT NULL,
    [PacketTypeID] [int] NULL,
    [PacketStatusID] [int] NULL,
CONSTRAINT [Location_PK] PRIMARY KEY CLUSTERED 
(
    [LocationID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [Device_Location_FK1] FOREIGN KEY([DeviceID])
REFERENCES [dbo].[Device] ([DeviceID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [Device_Location_FK1]
GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [PacketStatus_Location_FK1] FOREIGN KEY([PacketStatusID])
REFERENCES [dbo].[PacketStatus] ([PacketStatusID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [PacketStatus_Location_FK1]
GO
ALTER TABLE [dbo].[Location]  WITH CHECK ADD  CONSTRAINT [PacketType_Location_FK1] FOREIGN KEY([PacketTypeID])
REFERENCES [dbo].[PacketType] ([PacketTypeID])
GO
ALTER TABLE [dbo].[Location] CHECK CONSTRAINT [PacketType_Location_FK1]

Один из вариантов, я думаю, состоит в том, чтобы скопировать данные в новую таблицу, затем удалить старую таблицу и переименовать новую, однако у нас есть ограничения, которые необходимо будет удалить, чтобы это работало.

1 Ответ

5 голосов
/ 28 ноября 2011

Ваша идея новой таблицы - путь.

На сервере разработки вы можете увидеть скрипт, который SSMS выдаст, если вы измените тип данных с помощью конструктора таблиц. Это хорошее начало. Это добавит триггеры и ограничения обратно.

Такой инструмент, как Red gate SQL Compare, также позволяет проверить, что все было создано. OK

...