Contraintes orphelines dans la base de données SQL Server
-
15-11-2019 - |
Question
L'exécution de la requête suivante entraîne toutes les contraintes dans la base de données de notre client.Cependant, plusieurs lignes du jeu de résultats ne semblent pas avoir de parent, c'est-à-dire parent_object_id = 0
et OBJECT_NAME(parent_object_id)
Retour 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'
Cela signifie-t-il qu'il existe des contraintes orphelines dans la base de données ?Si oui, comment puis-je les supprimer ?
D’après leurs noms, je peux voir qu’il s’agit de restes d’avant que de grandes modifications ne soient apportées à la structure.
La solution
En utilisant sp_helptext
Je peux voir qu'ils ont été créés à l'aide d'un CREATE DEFAULT
déclaration, par exemple :
CREATE DEFAULT dbo.MyDefault AS 2
Cela signifie qu'il s'agit simplement de valeurs par défaut non liées, qui peuvent être liées à l'aide du sp_binddefault
selon MSDN, et supprimé avec un simple DROP DEFAULT
déclaration:
DROP DEFAULT dbo.MyDefault
Je n'étais pas au courant de cette syntaxe, qui sera apparemment supprimée dans une future version de SQL Server, selon l'article MSDN susmentionné.