У меня есть таблица с таким столбцом, который в настоящее время активен:
name NVARCHAR(128) NOT NULL DEFAULT ''
Я изменяю такой столбец, чтобы сделать его обнуляемым:
ALTER TABLE mytable ALTER COLUMN name NVARCHAR(128) NULL
Однако ограничение по умолчанию, с именем 'DF__mytable__datab__7DE4B36' в одном экземпляре таблицы все еще остается. Я знаю, что этого можно было бы избежать, если бы первоначальный автор назвал ограничение. У меня есть несколько экземпляров этих таблиц, но я не хочу вручную удалять каждое ограничение в каждой таблице, которая у меня есть. Каков самый простой и элегантный способ удаления этого ограничения по умолчанию для столбца в Sql Server, который я могу единообразно применить к каждому экземпляру этой таблицы?
Вот сценарий, который я в итоге использовал:
DECLARE @table_id AS INT
DECLARE @name_column_id AS INT
DECLARE @sql nvarchar(255)
-- Find table id
SET @table_id = OBJECT_ID('mytable')
-- Find name column id
SELECT @name_column_id = column_id
FROM sys.columns
WHERE object_id = @table_id
AND name = 'name'
-- Remove default constraint from name column
SELECT @sql = 'ALTER TABLE mytable DROP CONSTRAINT ' + D.name
FROM sys.default_constraints AS D
WHERE D.parent_object_id = @table_id
AND D.parent_column_id = @name_column_id
EXECUTE sp_executesql @sql
Другой сценарий, который можно использовать для достижения этой цели, можно найти здесь: Как удалить ограничение SQL по умолчанию, не зная его имени?
Спасибо!