Ta technika sprawdziła się bardzo dobrze.
I wykonany:
use [Mytable]
ALTER TABLE [dbo].[USER] ALTER COLUMN USER_ID bigint NOT NULL
Spowodowało to błędem, ponieważ nie było ograniczenie na klucz:
Msg 5074, Level 16, State 1, Line 2
The object 'PK_USER_USER_ID' is dependent on column 'USER_ID'.
Msg 4922, Level 16, State 9, Line 2
ALTER TABLE ALTER COLUMN USER_ID failed because one or more objects access this column.
Nie zostać zahamowane w SQL Server Management Studio I kliknięciu prawym przyciskiem myszy na ograniczeniu PK_USER_USER_ID, a następnie wybrano "Klucz skryptu jako >> Upuść i utwórz w> Nowe okno edytora zapytań":
ten generowany ten skrypt:
USE [Database]
GO
/****** Object: Index [PK_USER_USER_ID] Script Date: 18/03/2014 13:05:38 ******/
ALTER TABLE [dbo].[USER] DROP CONSTRAINT [PK_USER_USER_ID]
GO
/****** Object: Index [PK_USER_USER_ID] Script Date: 18/03/2014 13:05:38 ******/
ALTER TABLE [dbo].[USER] ADD CONSTRAINT [PK_USER_USER_ID] PRIMARY KEY CLUSTERED
(
[USER_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Potem wykonał pierwsza połowa tego skryptu, aby upuścić ograniczenie:
ALTER TABLE [dbo].[USER] DROP CONSTRAINT [PK_USER_USER_ID]
GO
teraz, że ograniczenie zniknął , oryginalna zmiana działała dobrze:
use [Mytable]
ALTER TABLE [dbo].[USER] ALTER COLUMN USER_ID bigint NOT NULL
Potem wykonał drugą połowę skryptu, aby dodać ograniczenie powrotem w:
ALTER TABLE [dbo].[USER] ADD CONSTRAINT [PK_USER_USER_ID] PRIMARY KEY CLUSTERED
(
[USER_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
16 ton danych - to dużo! – RedFilter
Czy brałeś pod uwagę tabelę tymczasową, nową strukturę, wstawianie i zastępowanie? –
@astander - to jest zasadniczo to, co zmienia schemat SSMS pod maską. – tvanfosson