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

Как удалить значение по умолчанию из столбца таблицы?

Как вы изменяете столбец для удаления значения по умолчанию?

Столбец был создан с помощью

 ALTER table sometable Add somecolumn nchar(1) NOT NULL DEFAULT 'N'

И затем изменится с помощью:

 alter table sometable alter column somecolumn nchar(1) null

Это разрешает null, но значение по умолчанию остается. Как его удалить?

4b9b3361

Ответ 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, чтобы проверить имя ограничения.... надеюсь, что это поможет.