DB2: Convertir colonne existante à l'identité
Je suis en train d'essayer de convertir une colonne existante à l'identité.
Jusqu'à présent, je suis en mesure de le faire très facilement avec les éléments suivants:
alter table list alter column id set generated always as identity (start with 0);
Malheureusement, j'en ai besoin pour commencer à le nombre maximum de données qui est déjà dans la table.
J'ai essayé ce qui suit, mais il se plaint de la sous-requête.
alter table list alter column id set generated always as identity (start with (select max(id) from list);
La sous-requête renvoie bien quand couru seul.
OriginalL'auteur arleslie | 2013-12-30
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé une solution intéressante sur un blog: Comment faire pour ajouter l'IDENTITÉ de la colonne à une table,
Ajouter not null colonne de type integer
Vous devez fournir la valeur par défaut pour elle sinon, db2 refuser de faire non null
alter table public.clicks add column id integer not null default 0
Baisse de la valeur par défaut de la colonne
Je ne suis pas sûr de savoir exactement pourquoi il est nécessaire parce que certains manuels sur internet néglige cette étape, mais je n'étais pas capable de le faire fonctionner sans ce sur DB2 9.7.3 LUW
alter table public.clicks alter column id drop default
Maintenant colonne d'ensemble toujours généré
alter table public.clicks alter column id set generated always as identity
Réorganisation de la table pour le rendre accessible en écriture
reorg table public.clicks
Maintenant remplacer les zéros générés itentity valeurs
update public.clicks set id = default
Et éventuellement faire de l'id de la colonne de clé primaire pour la table
alter table public.clicks add constraint pkey primary key(id)
Une autre solution à l'aide d'une procédure stockée
Redémarrage de la Colonne d'IDENTITÉ lors de la migration des données pour DB2
Si la création d'une table avec une colonne d'IDENTITÉ et vous devez vous assurer que votre colonne d'identité commence à partir de la dernière valeur max que vous chargez les données. IBM Données de Mouvement de l'Outil le fait automatiquement, mais si vous n'êtes pas en utilisant l'outil et veulent un moyen de synchroniser de la valeur de départ de l'identité de la colonne avec les données dans votre base de données, vous pouvez utiliser cette procédure pour synchroniser les données. lien
DB2 manuel: si vous souhaitez modifier une colonne d'identité
De la modification d'une colonne d'identité définition
Si vous recréer une table suivie par une importation ou une opération de chargement, et si vous avez une colonne d'IDENTITÉ dans la table, alors il sera remis à zéro pour commencer à générer de la valeur d'IDENTITÉ de 1 en suivant le loisir de le contenu de la table. Lors de l'insertion de nouvelles lignes dans cette recréé la table, vous ne voulez pas l'IDENTITÉ de la colonne pour commencer à partir de 1 à nouveau.
Vous ne voulez pas de doublons dans la colonne d'IDENTITÉ. Pour empêcher ceci de se produire, vous devez:
SELECT MAX(<IDENTITY column>)
. Ce sera de retour avec l'équivalent de la valeur de ce qu'aurait été la valeur de la colonne IDENTITÉ de la table.ALTER TABLE <table name> ALTER COLUMN <IDENTITY column> RESTART WITH <last counter value + 1>
heureux que vous ayez réussi, happy new year souhaite !!
Vous avez sauvé ma journée!
OriginalL'auteur MrSimpleMind