Подтвердить что ты не робот

Как удалить ненулевое ограничение в sql-сервере с помощью запроса

Я пытаюсь удалить ненулевое ограничение в SQL Server 2008 без потери данных.

4b9b3361

Ответ 1

 ALTER TABLE YourTable ALTER COLUMN YourColumn columnType NULL

Ответ 2

Удалить ограничение not null до null

ALTER TABLE 'test' CHANGE COLUMN 'testColumn' 'testColumn' datatype NULL;

Ответ 3

Удалить ограничение столбца: not null в null

ALTER TABLE test ALTER COLUMN column_01 DROP NOT NULL;

Ответ 4

Только для потомков:

Я объявлял свое имя столбца следующим образом:

ALTER TABLE <table_name> ADD <column_name> <datatype> NOT NULL DEFAULT 0

Чтобы успешно удалить имя <column_name > программно вы должны объявить свой столбец следующим образом:

ALTER TABLE <table_name> ADD <column_name> <data_type> NOT NULL CONSTRAINT <default_constraint_name> DEFAULT 0

Чтобы DROP <column_name > :

  • ALTER TABLE <table_name> DROP <default_constraint_name>
  • ALTER TABLE <table_name> ALTER COLUMN <column_name> <data_type> NULL
  • ALTER TABLE <table_name> DROP COLUMN <column_name>

Ответ 5

Вы должны удалить любые ограничения перед удалением, а не нулевым столбцом

DECLARE @ConstraintName nvarchar(200)
SELECT @ConstraintName = Name 
FROM SYS.DEFAULT_CONSTRAINTS 
WHERE PARENT_OBJECT_ID = OBJECT_ID('<tableName>') 
      AND PARENT_COLUMN_ID = 
         (SELECT column_id 
          FROM sys.columns 
          WHERE NAME = N'<columnToDelete>' 
                AND object_id = OBJECT_ID(N'<columnToDelete>'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE <tableNAme> DROP CONSTRAINT ' + @ConstraintName)
IF EXISTS (SELECT * FROM syscolumns WHERE id=object_id('<TableName>') AND name='<columnToDelete>')
EXEC('ALTER TABLE <tableName> DROP COLUMN <columnToDelete>')

Это работает для меня.