Как удалить значение по умолчанию из столбца таблицы?
Как вы изменяете столбец для удаления значения по умолчанию?
Столбец был создан с помощью
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
И затем изменится с помощью:
alter table sometable alter column somecolumn nchar(1) null
Это разрешает null, но значение по умолчанию остается. Как его удалить?
Ответы
Ответ 1
Это ограничение по умолчанию, вам нужно выполнить:
ALTER TABLE {TableName}
DROP CONSTRAINT ConstraintName
Если вы не указали имя при создании ограничения, то SQL Server создал его для вас. Вы можете использовать SQL Server Management Studio для поиска имени ограничения, перейдя к таблице, открыв ее узел дерева, а затем открыв узел Ограничения.
Если я правильно помню, ограничение будет называться как-то по DF_SomeStuff_ColumnName.
РЕДАКТИРОВАТЬ: Ответ Джоша В. содержит ссылку на SO вопрос, который показывает вам, как найти автоматически сгенерированное имя ограничения с использованием SQL вместо интерфейса Management Studio.
Ответ 2
Это то, что я придумал (прежде чем увидеть, как Джош У. ответил, ну, на самом деле я видел его, но быстро его очищал, я его неправильно понял):
declare @name nvarchar(100)
select @name = [name] from sys.objects where type = 'D' and parent_object_id = object_id('sometable')
if (@name is not null)
begin
exec ('alter table [sometable] drop constraint [' + @name +']')
end
Преимущество, которое я имею здесь, это то, что я знаю, что на всей таблице есть только одно такое ограничение. Если бы было два, я думаю, именно поэтому вы должны их назвать;).
(Проблемы заключаются в том, что это модификация, внесенная в 10 разных клиентских баз данных, поэтому нет единого согласованного имени для script)
Ответ 3
Если вы не знаете ограничения имени
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'__ColumnName__'
AND object_id = OBJECT_ID(N'__TableName__'))
IF @ConstraintName IS NOT NULL
EXEC('ALTER TABLE __TableName__ DROP CONSTRAINT ' + @ConstraintName)
fooobar.com/questions/62751/...
Ответ 4
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'
Найдите свое ограничение и используйте DROP CONSTRAINT
, чтобы удалить его. Или запустите цикл курсора /while, чтобы удалить все аналогичные значения по умолчанию в базе данных.
Ответ 5
Если вы используете SQL Server Management Studio, это довольно просто.
Если существует несколько ограничений, связанных с таблицей, и вы не хотите их удалять, щелкните правой кнопкой мыши на этом ограничении и выберите "Script Cnstraint as → CREATE to → New Query Editor Window". Это покажет вам код, который создал ограничение, включая имя столбца и значение по умолчанию.
Затем просто щелкните правой кнопкой мыши по ограничению, которое вы хотите удалить, и выберите "Удалить".
Ответ 6
alter table <tablename> drop constraint <constraintname>
если вы не знаете имя ограничения, которое вы можете использовать SQL Server Manangement Studio, чтобы проверить имя ограничения.... надеюсь, что это поможет.