Comme titre, j'ai une table existante qui est déjà remplie avec 150000 enregistrements. J'ai ajouté une colonne Id (qui est actuellement nulle).
Je suppose que je peux exécuter une requête pour remplir cette colonne avec des nombres incrémentiels, puis définir comme clé primaire et activer l'incrémentation automatique. Est-ce la bonne façon de procéder? Et si oui, comment remplir les premiers chiffres?
sql-server
sql-server-2008
primary-key
alter-table
fearofawhackplanet
la source
la source
ALTER TABLE ORDER ALTER COLUMN ORDERNO RESTART WITH 1
mais je ne voulais pas l'essayer sans vérifier avec un expert :) Réf. pic.dhe.ibm.com/infocenter/iseries/v7r1m0/…alter table attachments add ATTACHMENT_NUMBER int identity (1000, 1)
PRIMARY KEY
cela implique qu'ilNOT NULL
est en place - encore une fois - ce n'est pas absolument nécessaire. Mais je préfère être explicite et donc j'ai toujours leNOT NULL
là, juste pour être absolument clairPRIMARY KEY
, l'index cluster est créé automatiquement pour vous (sauf si vous le spécifiez explicitementNONCLUSTERED
)Vous ne pouvez pas "allumer" l'IDENTITÉ: c'est une reconstruction de table.
Si vous ne vous souciez pas de l'ordre des numéros, vous ajouteriez la colonne, NON NULL, avec IDENTITÉ en une seule fois. 150 000 lignes, ce n'est pas beaucoup.
Si vous devez conserver l'ordre des numéros, ajoutez les numéros en conséquence. Utilisez ensuite le concepteur de table SSMS pour définir la propriété IDENTITY. Cela vous permet de générer un script qui effectuera la suppression / l'ajout / la conservation de numéros de colonne / le réensemencement pour vous.
la source
ALTER TABLE ... SWITCH
peut le faire sans cela.J'ai eu ce problème, mais je n'ai pas pu utiliser une colonne d'identité (pour diverses raisons). Je me suis installé sur ceci:
Emprunté d' ici .
la source
Si la colonne existe déjà dans votre table et qu'elle est nulle, vous pouvez mettre à jour la colonne avec cette commande (remplacez id, tablename et tablekey):
la source
Lorsque nous ajoutons une colonne d'identité dans une table existante, elle se remplit automatiquement, pas besoin de la remplir manuellement.
la source
par le concepteur, vous pouvez définir l'identité (1,1), faites un clic droit sur tbl => desing => en partie à gauche (clic droit) => propriétés => dans les colonnes d'identité, sélectionnez #colonne
Propriétés
colonne idendtity
la source
Si votre table est en relation avec d'autres tables à l'aide de sa clé primaire ou foriegen, il peut être impossible de modifier votre table. vous devez donc supprimer et recréer la table.
Pour résoudre ces problèmes, vous devez générer des scripts en cliquant avec le bouton droit sur la base de données et dans le type d'options avancé, définissez le type de données à scripter sur le schéma et les données. après cela, l'utilisation de ce script avec la modification de votre colonne pour identifier et régénérer la table à l'aide de l'exécution de sa requête.
votre requête sera comme ici:
la source
Voici une idée que vous pouvez essayer. Table d'origine - pas de colonne d'identité table1 créez une nouvelle table - appelez table2 avec la colonne d'identité. copiez les données de table1 à table2 - la colonne d'identité est remplie automatiquement avec des nombres incrémentés automatiquement.
renommer la table d'origine - table1 en table3 renommer la nouvelle table - table2 en table1 (table d'origine) Vous avez maintenant la table1 avec la colonne d'identité incluse et remplie pour les données existantes. après vous être assuré qu'il n'y a pas de problème et avoir fonctionné correctement, supprimez la table3 lorsqu'elle n'est plus nécessaire.
la source
Créez une nouvelle table avec un nom différent et les mêmes colonnes, une association de clé primaire et de clé étrangère et liez-la dans votre instruction d'insertion de code. Par exemple: pour les EMPLOYÉS, remplacez-les par des EMPLOYÉS.
Cependant, vous devez soit supprimer la table des EMPLOYÉS existante, soit effectuer certains ajustements en fonction de vos besoins.
la source
Cette réponse est un petit ajout à la réponse la plus votée et fonctionne pour SQL Server. La question demandait une clé primaire d'incrémentation automatique, la réponse actuelle ajoute la clé primaire, mais elle n'est pas signalée comme incrémentation automatique. Le script ci-dessous vérifie l'existence des colonnes et l'ajoute avec l'indicateur d'auto-incrémentation activé.
la source
la source
alter table / ** collez le nom du tabal ** / add id int IDENTITY (1,1)
supprimer de / ** coller le nom du tabal ** / où id dans
(
sélectionnez a.id FROM / ** collez le nom du tabal / en tant que LEFT OUTER JOIN (SELECT MIN (id) comme id FROM / collez le nom du tabal / GROUP BY / collez les colonnes c1, c2 .... ** /
O t t1.id EST NUL
)
modifier la table / ** coller le nom du tabal ** / DROP COLUMN id
la source
Essayez quelque chose comme ça (sur une table de test d'abord):
Je n'ai pas testé cela du tout, alors faites attention!
la source
IDENTITY
colonnes) et ne fonctionnerait pas de toute façon.UPDATE your_table SET your_id_field = MAX(your_id_field)+1
vous ne pouvez pas simplement rentrerMAX
dedans. Où se trouve uneWHERE
clause pour éviter de simplement mettre à jour plusieurs fois la même ligne?Cela fonctionne dans MariaDB, donc je ne peux qu'espérer que ce soit le cas dans SQL Server: supprimez la colonne ID que vous venez d'insérer, puis utilisez la syntaxe suivante: -
ALTER TABLE nom_table ADD id INT PRIMARY KEY AUTO_INCREMENT;
Pas besoin d'une autre table. Cela insère simplement une colonne id, en fait l'index principal et la remplit avec des valeurs séquentielles. Si SQL Server ne le fait pas, mes excuses pour avoir perdu votre temps.
la source
ALTER TABLE nom_table ADD COLUMN ID INT NOT NULL PRIMARY KEY AUTO_INCREMENT; Cela pourrait être utile
la source