Как отбросить ограничение значения по умолчанию SQL, не зная его имя?

Соединение 2 и 3, действительно.

Некоторые стога сена не имеют специализированной поисковой стратегии; примером этого является массив. Единственный способ найти что-то состоит в том, чтобы запуститься вначале и протестировать каждый объект, пока Вы не находите тот, который Вы хотите.

Для такого рода вещи, бесплатная функция является, вероятно, лучшей (как C++).

Некоторые стога сена могут иметь специализированную поисковую стратегию, наложенную на них. Массив может быть отсортирован, позволив Вам использовать двоичный поиск, например. Бесплатная функция (или пара бесплатных функций, например, вид и binary_search) является, вероятно, наилучшим вариантом.

Некоторые стога сена имеют интегрированную поисковую стратегию как часть их реализации; ассоциативные контейнеры (хешированные или упорядоченные множества и карты) все делают, например. В этом случае открытие является, вероятно, существенным методом поиска, таким образом, это должен, вероятно, быть метод, т.е. haystack.find (игла).

189
задан OMG Ponies 15 September 2009 в 15:23
поделиться

3 ответа

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)
256
ответ дан 23 November 2019 в 05:37
поделиться

Сообщение в блоге Роба Фарли может быть полезным:

Примерно так:

 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
232
ответ дан 23 November 2019 в 05:37
поделиться

Чтобы удалить ограничение для нескольких столбцов:

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)
11
ответ дан 23 November 2019 в 05:37
поделиться