Как вы удаляете значение по умолчанию из столбца в таблице?
Как изменить столбец, чтобы удалить значение по умолчанию?
Столбец был создан с помощью:
ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'
И затем изменено с:
alter table sometable alter column somecolumn nchar(1) null
Это позволяет пустые значения, но значение по умолчанию остается. Как вы можете удалить это?
6 ответов
Это ограничение по умолчанию, вам нужно выполнить:
ALTER TABLE {TableName}
DROP CONSTRAINT ConstraintName
Если вы не указали имя при создании ограничения, то SQL Server создал его для вас. Вы можете использовать SQL Server Management Studio для поиска имени ограничения, перейдя к таблице, открыв ее узел дерева, а затем открыв узел Ограничения.
Если я правильно помню, ограничение будет называться как-то по DF_SomeStuff_ColumnName.
РЕДАКТИРОВАТЬ: Ответ Джоша В. содержит ссылку на SO вопрос, который показывает вам, как найти автоматически сгенерированное имя ограничения с использованием SQL вместо интерфейса Management Studio.
Если вы не знаете ограничения имени
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)
/questions/36089950/kak-udalit-stolbets-s-ogranicheniem/36089970#36089970
Это то, что я придумал (прежде чем увидеть ответ Джоша У., ну, на самом деле, я видел это, но просмотрел его так быстро, что я неправильно понял):
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 различных клиентских баз данных, поэтому в сценарии нет единого согласованного имени)
select name from sys.default_constraints where name like '%first_3_chars_of_field_name%'
Найдите свое ограничение и используйте DROP CONSTRAINT
бросить это. Или запустите курсор / цикл while, чтобы сбросить все похожие значения по умолчанию в базе данных.
Если вы используете SQL Server Management Studio, это довольно просто.
Если с таблицей связано несколько ограничений, и вы не хотите удалять их все, щелкните правой кнопкой мыши ограничение и выберите "Script Cnstraint as -> CREATE to -> New Query Editor Window". Это покажет вам код, который создал ограничение, включая имя столбца и значение по умолчанию.
Затем просто щелкните правой кнопкой мыши на ограничении, которое вы хотите удалить, и выберите Удалить.
У меня также была такая же проблема, и я изменил таблицу и добавил значение по умолчанию так же, как и вы. Но ни одно из вышеперечисленных решений не решило мою проблему, потому что, несмотря на несколько обновлений, значение по умолчанию не было указано в списке ограничений, однако оно работало при вставке в таблицу.
Я наконец решил это, щелкнув правой кнопкой мыши имя таблицы в SQL Management Studio и выбрав Дизайн. Затем я удалил значения по умолчанию в свойствах столбца.
alter table <tablename> drop constraint <constraintname>
если вы не знаете имя ограничения, вы можете использовать sql server manangement studio для проверки имени ограничения.... надеюсь, это поможет.