Ajouter la colonne de clé primaire dans la table SQL
Je suis étudiant de SGBDR.
J'ai des question très simple disons que j'ai une Table existante dans SQL server. Ce sera un script pour modifier le tableau.
- Chute de la Colonne "RowId" si existent.
- Chute de contrainte si existent.
- Ajouter une nouvelle colonne "RowId" dans le tableau.
- Faire de cette colonne comme clé primaire.
- Autoincrement de type int.
La suppression d'une colonne et la suppression d'une contrainte de clé primaire sont des choses différentes. Votre première ligne est donc pas clair. Vous pouvez également poster votre tentative à ce sujet et expliquer où vous êtes coincé?
Que voulez-vous vraiment?
Ne voulez-vous pas à préserver "vieux" RowId jusqu'à ce que la totalité de la séquence est complète? Est-ce "vieux" RowId devrait être l'IDENTITÉ de trop? Pourquoi remplacer une colonne avec un autre du même nom?
Que voulez-vous vraiment?
Ne voulez-vous pas à préserver "vieux" RowId jusqu'à ce que la totalité de la séquence est complète? Est-ce "vieux" RowId devrait être l'IDENTITÉ de trop? Pourquoi remplacer une colonne avec un autre du même nom?
OriginalL'auteur SOF User | 2012-02-06
Vous devez vous connecter pour publier un commentaire.
Dans SQL Server 2005 ou plus récent, vous pouvez utiliser ce script:
Bien sûr, ce script peut encore échouer, si d'autres tableaux font référence à cette
dbo.YourTable
à l'aide des contraintes de clé étrangère sur la pré-existantRowId
colonne...Mise à jour: et bien sûr, d'où je utiliser
dbo.YourTable
ouPK_YourTable
, vous avez pour remplacer ceux de l'espace réservé à la réelle table /les noms de contrainte à partir de votre propre base de données (vous n'avez pas mentionné ce qu'ils étaient, dans votre question.....)Msg 5074, Niveau 16, État 1, Ligne 4 L'objet "PK_tempTable' dépend de la colonne RowId'.
Eh bien, puis d'inclure une
ALTER TABLE dbo.YourTable DROP CONSTRAINT PK_tempTable
- est le PK appelé quelque chose d'autre que le nom de la table??? Si votre contrainte n'est pas appeléPK_YourTable
, vous devez vous adapter mon script en conséquence, bien sûr!Je pense que ce n'est pas dans la contrainte, il s'affiche dans la clé de dossier
J'ai vérifié que OBJECT_ID('dbo.tempTable') n'est pas de retour correcte objectid
OriginalL'auteur marc_s
Note: cette réponse a été ajoutée avant de questions de mise à jour
Exemple de script:
Et aléatoires de la pensée... êtes-vous essayer de réinitialiser une colonne d'IDENTITÉ?
Si oui, alors utiliser DBCC CHECKIDENT
OriginalL'auteur gbn
Juste un commentaire pour améliorer ces excellentes réponses (ne peut pas utiliser encore reçu de commentaires - je suis une réputation de point de ce privilège) et comme la future référence pour moi:
Une nouvelle IDENTITÉ (numéroauto) de la colonne peuvent être ajoutés et mis la clé primaire dans une seule instruction:
Je préfère ne pas s'embêter avec les noms de contrainte quand il ne l'aide pas.
Vous pouvez spécifier semences (et incrément) les valeurs entre parenthèse après le
IDENTITY
mot-clé.OriginalL'auteur bitoolean