Restrições órfãs no banco de dados SQL Server
-
15-11-2019 - |
Pergunta
A execução da consulta a seguir resulta em todas as restrições no banco de dados do nosso cliente.No entanto, várias linhas no conjunto de resultados não parecem ter um pai, ou seja, parent_object_id = 0
e OBJECT_NAME(parent_object_id)
retorna 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'
Isso significa que existem restrições órfãs no banco de dados?Se sim, como faço para removê-los?
Pelos nomes, posso ver que são sobras de antes de muitas mudanças serem feitas na estrutura.
Solução
Usando sp_helptext
Posso ver que eles foram criados usando um CREATE DEFAULT
declaração, por exemplo:
CREATE DEFAULT dbo.MyDefault AS 2
Isso significa que eles são simplesmente padrões não vinculados, que podem ser vinculados usando o sp_binddefault
de acordo com MSDN, e removido com um simples DROP DEFAULT
declaração:
DROP DEFAULT dbo.MyDefault
Eu não conhecia essa sintaxe, que aparentemente será removida em uma versão futura do SQL Server, de acordo com o artigo do MSDN mencionado acima.