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 s'agit de plusieurs plates-formes, mais si les informations ne sont pas disponibles, il faut 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 plus tard.
Voici à peu près la même chose que la réponse de @ user186476. Il 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 la contrainte par défaut vous-même, SQL Server crée un nom fou comme "DF_TableN_Colum_95AFE4B5". Pour faciliter la modification votre schéma dans le futur, 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'
sys
table et est facile à retenir.Vous pouvez utiliser ce qui suit pour affiner encore plus les résultats en spécifiant le nom de la table et le nom de la colonne avec lesquels la contrainte par défaut correspond:
la source
Il ne semble y avoir aucun nom de contrainte par défaut dans le
Information_Schema
vues.utiliser
SELECT * FROM sysobjects WHERE xtype = 'D' AND name = @name
pour rechercher une contrainte par défaut par son nomla source
Le script ci-dessous répertorie toutes les contraintes par défaut et les valeurs par défaut des tables utilisateur de la base de données dans laquelle il est exécuté:
la source
Si vous souhaitez obtenir une contrainte par les noms de colonne ou de table, ou si vous souhaitez obtenir toutes les contraintes de la base de données, recherchez d'autres réponses. Cependant, si vous cherchez simplement exactement ce que la question demande, à savoir, "tester si une contrainte par défaut donnée existe ... par le nom de la contrainte" , alors il existe un moyen beaucoup plus simple.
Voici une réponse à l'épreuve du temps qui n'utilise pas du tout les tables
sysobjects
ou d'autressys
:la source
la source
La colonne COLUMN_DEFAULT de INFORMATION_SCHEMA.COLUMNS est-elle ce que vous recherchez?
la source
la source
Nécromancie.
Si vous avez seulement besoin de vérifier si une contrainte par défaut existe
(la ou les contraintes par défaut peuvent avoir un nom différent dans les bases de données mal gérées),
utilisez INFORMATION_SCHEMA.COLUMNS (column_default):
Si vous souhaitez vérifier uniquement par le nom de la contrainte:
Enfin, vous pouvez simplement créer une vue appelée
INFORMATION_SCHEMA.DEFAULT_CONSTRAINTS:
la source
Je ne pense pas que ce soit dans INFORMATION_SCHEMA - vous devrez probablement utiliser des sysobjects ou des tables / vues obsolètes associées.
Vous pourriez penser qu'il y aurait un type pour cela dans INFORMATION_SCHEMA.TABLE_CONSTRAINTS, mais je n'en vois pas.
la source
Probablement parce que sur certains des autres SGBD SQL, la "contrainte par défaut" n'est pas vraiment une contrainte, vous ne trouverez pas son nom dans "INFORMATION_SCHEMA.TABLE_CONSTRAINTS", donc votre meilleur pari est "INFORMATION_SCHEMA.COLUMNS" comme d'autres l'ont déjà mentionné.
(SQLServer-ignorant ici)
La seule raison à laquelle je peux penser lorsque vous devez connaître le nom de la "contrainte par défaut" est si SQLServer ne prend pas en charge la
"ALTER TABLE xxx ALTER COLUMN yyy SET DEFAULT..."
commande. Mais alors vous êtes déjà dans une zone non standard et vous devez utiliser les moyens spécifiques au produit pour obtenir ce dont vous avez besoin.la source
Que diriez-vous d'utiliser une combinaison de CHECK_CONSTRAINTS et CONSTRAINT_COLUMN_USAGE:
la source
J'utilise le script suivant pour récupérer toutes les valeurs par défaut (sp_binddefaults) et toutes les contraintes par défaut avec les scripts suivants:
la source
Vue du catalogue d'objets : sys.default_constraints
Les vues de schéma d'informations
INFORMATION_SCHEMA
sont conformes à la norme ANSI, mais les contraintes par défaut ne font pas partie de la norme ISO. Microsoft SQL Server fournit des vues de catalogue système pour obtenir des informations sur les métadonnées d'objets SQL Server.sys.default_constraints
vue du catalogue système utilisée pour obtenir les informations sur les contraintes par défaut.la source