J'étais curieux de savoir s'il existe un moyen de savoir si une colonne IDENTITY a déjà été incrémentée s'il n'y a pas de données dans la table. (C.-à-élément de données a été inséré, puis supprimé)Fonction de table SQL ou moyen de dire si la colonne d'identité a été utilisée?
Répondre
Pour SQL Server, vous pouvez utiliser this approach:
SELECT IDENT_SEED(TABLE_NAME) AS Seed,
IDENT_INCR(TABLE_NAME) AS Increment,
IDENT_CURRENT(TABLE_NAME) AS Current_Identity,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE OBJECTPROPERTY(OBJECT_ID(TABLE_NAME), 'TableHasIdentity') = 1
AND TABLE_TYPE = 'BASE TABLE'
Notez que vous pouvez remettre à zéro la valeur de départ dans SQL Server, de sorte que le apporach ci-dessus ne vous indique le courant état de la graine, pas s'il y avait jamais des données dans le tableau ou non.
La raison pour laquelle je demande est parce que je déconnais avec mes tables de test et tronqué toutes les tables, même si elles n'ont jamais été utilisées auparavant. Ce que j'ai remarqué, c'est que les tables qui n'ont jamais été utilisées auparavant, quand les données sont insérées, l'IDENTITY reste à ZERO (0) juste pour cet enregistrement et ensuite elle augmente à UN (1) après. Avez-vous déjà vu ce comportement? Je tronque parce que j'ai des relations associées aux tables – mattgcon
Ceci est un problème commun de SQL Server. Vous pouvez exécuter 'DBCC CHECKIDENT ('MyTable', RESEED, 0)' après avoir tronqué pour que l'identité commence à 1. – RedFilter
C'est la chose que je ne peux pas tronquer car msot de ces tables avec ceci est une relation étrangère – mattgcon
Cette question est spécifique à la plateforme car vous essayez d'obtenir des métadonnées. Quelle base de données utilisez-vous? – RedFilter
Par exemple, pour Oracle, il n'y a pas d'identité spécifique à une table, elle utilise des séquences qui peuvent être partagées entre les tables. – RedFilter
Cette question est pour SQL – mattgcon