Je souhaite ajouter une colonne à une base de données héritée existante et écrire une procédure par laquelle je peux attribuer à chaque enregistrement une valeur différente. Quelque chose comme ajouter une colonne et générer automatiquement les données correspondantes.
Par exemple, si j'ajoute une nouvelle colonne appelée "ID" (numéro), je veux ensuite initialiser une valeur unique pour chacun des enregistrements. Ainsi, ma colonne d' identité contiendra des enregistrements par exemple 1 to 1000
.
Comment je fais ça?
sql
sql-server
Adhip Gupta
la source
la source
Réponses:
Cela dépendra de la base de données, mais pour SQL Server, cela peut être réalisé comme suit:
la source
Prevent saving changes that require table re-creation
décocher cette case et vous pourrez ajouter une colonne d'identité même en utilisant le gui.Il serait utile de publier la base de données SQL que vous utilisez. Pour MySQL, vous voulez probablement auto_increment:
Je ne sais pas si cela applique les valeurs rétroactivement. Si ce n'est pas le cas, vous devriez simplement pouvoir parcourir vos valeurs avec une procédure stockée ou dans un programme simple (tant que personne d'autre n'écrit dans la base de données) et utiliser la
LAST_INSERT_ID()
fonction pour générer la valeur d'id.la source
pour oracle, vous pouvez faire quelque chose comme ci-dessous
la source
Et l'équivalent Postgres (la deuxième ligne n'est obligatoire que si vous voulez que "id" soit une clé):
la source
L'utilisation d'un ALTER TABLE devrait fonctionner. Ajoutez la colonne avec le type approprié et un indicateur IDENTITY et cela devrait faire l'affaire
Consultez cet article MSDN http://msdn.microsoft.com/en-us/library/aa275462(SQL.80).aspx sur la syntaxe ALTER TABLE
la source
pour le type de données UNIQUEIDENTIFIER dans le serveur SQL, essayez ceci
Si vous souhaitez créer une clé primaire à partir de cette colonne, utilisez ceci
la source
Dépend de la base de données car chaque base de données a une manière différente d'ajouter des numéros de séquence. Je modifierais la table pour ajouter la colonne puis j'écrirais un script db dans groovy / python / etc pour lire les données et mettre à jour l'identifiant avec une séquence. Une fois que les données ont été définies, j'ajouterais une séquence au tableau qui commence après le nombre supérieur. Une fois les données définies, définissez correctement les clés primaires.
la source
Si vous ne voulez pas que votre nouvelle colonne soit de type
IDENTITY
(auto-incrémentation), ou que vous voulez être précis sur l'ordre dans lequel vos lignes sont numérotées, vous pouvez ajouter une colonne de typeINT NULL
, puis la remplir comme ceci. Dans mon exemple, la nouvelle colonne s'appelle MyNewColumn et la colonne de clé primaire existante pour la table s'appelle MyPrimaryKey.Cela fonctionne dans SQL Server 2005 et versions ultérieures, c'est-à-dire les versions qui prennent en charge
ROW_NUMBER()
la source