Я пытаюсь удалить ненулевое ограничение в SQL Server 2008 без потери данных.
Как удалить ненулевое ограничение в sql-сервере с помощью запроса
Ответ 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>')
Это работает для меня.