Потерянные ограничения в базе данных SQL Server
-
15-11-2019 - |
Вопрос
Выполнение следующего запроса приводит ко всем ограничениям в базе данных нашего клиента.Однако у нескольких строк в результирующем наборе, похоже, нет родительского элемента, т.е. parent_object_id = 0
и OBJECT_NAME(parent_object_id)
возвращается NULL
.
SELECT name, type_desc, OBJECT_NAME(parent_object_id), parent_object_id
FROM sys.objects
WHERE is_ms_shipped = 0
AND type_desc LIKE '%_CONSTRAINT'
Означает ли это, что в базе данных существуют бесхозные ограничения?Если да, то как мне их удалить?
Судя по их названиям, я вижу, что они остались с тех пор, как в структуру было внесено большое количество изменений.
Решение
С помощью sp_helptext
Я вижу, что они были созданы с использованием CREATE DEFAULT
заявление, например.:
CREATE DEFAULT dbo.MyDefault AS 2
Это означает, что они просто являются несвязанными значениями по умолчанию, которые могут быть связаны с помощью sp_binddefault
согласно с MSDN, и удаляется простым DROP DEFAULT
заявление:
DROP DEFAULT dbo.MyDefault
Я не знал об этом синтаксисе, который, по-видимому, будет удален в будущей версии SQL Server, согласно вышеупомянутой статье MSDN.