Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment puis-je trouver une contrainte par défaut en utilisant INFORMATION_SCHEMA ?

Si je comprends bien, les contraintes de valeur par défaut ne font pas partie de la norme ISO, elles n'apparaissent donc pas dans INFORMATION_SCHEMA. INFORMATION_SCHEMA semble être le meilleur choix pour ce type de tâche car il est multiplateforme, mais si les informations ne sont pas disponibles, il convient d'utiliser les vues de catalogue d'objets (sys.*) au lieu des vues de table système, qui sont obsolètes dans SQL Server 2005 et versions ultérieures.

Ci-dessous est à peu près la même chose que la réponse de @ user186476. Elle renvoie le nom de la contrainte de valeur par défaut pour une colonne donnée. (Pour les utilisateurs non-SQL Server, vous avez besoin du nom de la valeur par défaut pour la supprimer, et si vous ne nommez pas vous-même la contrainte par défaut, SQL Server crée un nom fou comme "DF_TableN_Colum_95AFE4B5". Pour faciliter le changement votre schéma à l'avenir, nommez toujours explicitement vos contraintes !)

-- returns name of a column's default value constraint 
SELECT
    default_constraints.name
FROM 
    sys.all_columns

        INNER JOIN
    sys.tables
        ON all_columns.object_id = tables.object_id

        INNER JOIN 
    sys.schemas
        ON tables.schema_id = schemas.schema_id

        INNER JOIN
    sys.default_constraints
        ON all_columns.default_object_id = default_constraints.object_id

WHERE 
        schemas.name = 'dbo'
    AND tables.name = 'tablename'
    AND all_columns.name = 'columnname'