Соединение 2 и 3, действительно.
Некоторые стога сена не имеют специализированной поисковой стратегии; примером этого является массив. Единственный способ найти что-то состоит в том, чтобы запуститься вначале и протестировать каждый объект, пока Вы не находите тот, который Вы хотите.
Для такого рода вещи, бесплатная функция является, вероятно, лучшей (как C++).
Некоторые стога сена могут иметь специализированную поисковую стратегию, наложенную на них. Массив может быть отсортирован, позволив Вам использовать двоичный поиск, например. Бесплатная функция (или пара бесплатных функций, например, вид и binary_search) является, вероятно, наилучшим вариантом.
Некоторые стога сена имеют интегрированную поисковую стратегию как часть их реализации; ассоциативные контейнеры (хешированные или упорядоченные множества и карты) все делают, например. В этом случае открытие является, вероятно, существенным методом поиска, таким образом, это должен, вероятно, быть метод, т.е. haystack.find (игла).
Expanding on Mitch Wheat's code, the following script will generate the command to drop the constraint and dynamically execute it.
declare @schema_name nvarchar(256)
declare @table_name nvarchar(256)
declare @col_name nvarchar(256)
declare @Command nvarchar(1000)
set @schema_name = N'MySchema'
set @table_name = N'Department'
set @col_name = N'ModifiedDate'
select @Command = 'ALTER TABLE ' + @schema_name + '.[' + @table_name + '] DROP CONSTRAINT ' + d.name
from sys.tables t
join sys.default_constraints d on d.parent_object_id = t.object_id
join sys.columns c on c.object_id = t.object_id and c.column_id = d.parent_column_id
where t.name = @table_name
and t.schema_id = schema_id(@schema_name)
and c.name = @col_name
--print @Command
execute (@Command)
Сообщение в блоге Роба Фарли может быть полезным:
Примерно так:
declare @table_name nvarchar(256)
declare @col_name nvarchar(256)
set @table_name = N'Department'
set @col_name = N'ModifiedDate'
select t.name, c.name, d.name, d.definition
from
sys.tables t
join sys.default_constraints d on d.parent_object_id = t.object_id
join sys.columns c on c.object_id = t.object_id
and c.column_id = d.parent_column_id
where
t.name = @table_name
and c.name = @col_name
Чтобы удалить ограничение для нескольких столбцов:
declare @table_name nvarchar(256)
declare @Command nvarchar(max) = ''
set @table_name = N'ATableName'
select @Command = @Command + 'ALTER TABLE ' + @table_name + ' drop constraint ' + d.name + CHAR(10)+ CHAR(13)
from sys.tables t
join sys.default_constraints d on d.parent_object_id = t.object_id
join sys.columns c on c.object_id = t.object_id
and c.column_id = d.parent_column_id
where t.name = @table_name and c.name in ('column1','column2','column3')
--print @Command
execute (@Command)