2012-12-18 4 views
0

Мне нужно изменить тип данных столбца в SQL Server. Итак, каковы ограничения в работе?Изменение типа данных столбца в SQL Server

Я знаю, что мне нужно удалить индекс и другие ограничения?

Должен ли я удалить ненужную проверку?

Какие еще вещи необходимо проверить перед изменением типа данных?

Мне нужно удалить ограничения и изменить таблицу, а затем снова добавить ограничения.

Это правильный способ сделать это?

DROP INDEX UX_1_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_1_COMPUTATION ON dbo.Computation (ComputationID); 

Здесь UX_1_COMPUTATION уникальное имя индекса, Computation это имя таблицы и ComputationID это имя столбца.

Это правильно?

Update

Так, если есть composite index там, где более чем один столбец участвует, Как я с этим бороться? Эти индексы содержат столбец первичного ключа с столбцами не первичного ключа.

Когда я попытался выполнения следующее заявление

DROP INDEX UX_2_COMPUTATION ON dbo.Computation 

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) 

CREATE UNIQUE INDEX UX_2_COMPUTATION ON dbo.Computation (ComputationID , ComputeGuid); 

Он бросает следующее исключение

SQL DROP INDEX UX_2_COMPUTATION

 ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: Error executing SQL DROP INDEX UX_2_COMPUTATION 

     ON dbo.Computation 

     ALTER TABLE dbo.Computation 

     ALTER COLUMN ComputationID NVARCHAR(10) Not Null 

     CREATE INDEX UX_2_COMPUTATION 

     ON dbo.Computation (ComputationID , ComputeGuid): The object 

'PK_Computation' is dependent on column 'ComputationID '.: 

     Caused By: The object 'PK_Computation' is dependent on column 'ComputationID '. 

Спасибо,

-Sam

+1

Было бы полезно знать, что вам нужно изменить его с, и что? Каков тип раньше - что это должно быть после? Это изменение здесь создаст ** nullable ** 'NVARCHAR (25)' column - это то, что вы хотите? –

+0

@marc_sIt не пустой столбец. Мне нужно создать не пустой столбец – Sam

+0

Итак, это должно быть как 'ALTER TABLE dbo.Comput ALTER COLUMN ComputationID NVARCHAR (25) Не null' right? и нет никаких проблем с синтаксисом для индекса? – Sam

ответ

2

Ваш текущий оператор изменит столбец с нулевым столбцом NVARCHAR(25) - это то, что вы хотите?

Если вы хотите быть уверены, что ваша колонка будет NON NULL, вы должны явно указать это:

ALTER TABLE dbo.Computation 
ALTER COLUMN ComputationID NVARCHAR(25) NOT NULL 
+4

Для ** созданных ** столбцов значение по умолчанию, если оно не указано, зависит от параметра «SET ANSI_NULL_DFLT_ON» и базы данных «ANSI null default». Для измененных столбцов, если они не указаны, они всегда будут делать их «NULL», даже если первоначально они были «NOT NULL» –

+0

@MartinSmith: спасибо за обновление - всегда полезно иметь дополнительный совет на уровне гуру! :-) –

Смежные вопросы