Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2769 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL Server] Drop primary key

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL Server] Drop primary key

n°971310
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-02-2005 à 10:03:34  profilanswer
 

Est-ce qu'il existe une instruction simple pour droper une PK sur une table, sans connaître le nom de cette PK ?
 
Par exemple, voici ma table :

Code :
  1. if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[zMutationValideur]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
  2. drop table [dbo].[zMutationValideur]
  3. GO
  4. CREATE TABLE [dbo].[zMutationValideur] (
  5. [valideurMutationId] [int] IDENTITY (1, 1) NOT NULL ,
  6. [demandeId] [int] NOT NULL ,
  7. [userId] [int] NOT NULL ,
  8. [dateIntervention] [datetime] NULL ,
  9. [etat] [int] NOT NULL ,
  10. [departementId] [int] NULL ,
  11. [localisationid] [int] NULL ,
  12. [commentaire] [varchar] (255) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
  13. [ajouteParId] [int] NOT NULL ,
  14. [employeeId] [int] NULL ,
  15. [VAL_NEW_USER_ID] [int] NULL ,
  16. [gestParcId] [int] NULL
  17. ) ON [PRIMARY]
  18. GO
  19. ALTER TABLE [dbo].[zMutationValideur] WITH NOCHECK ADD
  20. CONSTRAINT [PK_zMutationValideur_1__13] PRIMARY KEY  CLUSTERED
  21. (
  22.  [valideurMutationId]
  23. )  ON [PRIMARY]
  24. GO


 
Comme vous pouvez voir, la PK a un "nom à la con" généré automatiquement parceque la personne qui a créé la table l'a fait depuis la GUID de SQL Server.
 
D'une base à l'autre, elle risque donc d'avoir un nom différent. (cette table est présente dans une centaine de bases, et je dois la modifier dans toutes les bases grace à un script T-SQL)
 
J'ai toujours la solution d'aller chercher les contraintes de type PK rattachées à cette table dans les tables system, mais je préfèrerais utiliser une syntaxe moins barbare, genre :
 

Code :
  1. alter table zMutationValideur drop primary key


(puisqu'il ne peut y avoir qu'une seule clé primaire sur une même table, ce n'est pas en soit impossible)
 
Une telle syntaxe existe-t-elle ?

mood
Publicité
Posté le 04-02-2005 à 10:03:34  profilanswer
 

n°971327
Arjuna
Aircraft Ident.: F-MBSD
Posté le 04-02-2005 à 10:17:26  profilanswer
 

Ca serait bien, parceque là, ça fait un peu marteau pilon pour casser une noisette :D
 

Code :
  1. -- /* Table zMutationValideur */
  2. alter table zMutationValideur add orgid int not null default 1
  3. declare @tmp as varchar(255)
  4. declare @pkname as varchar(255)
  5. declare pk cursor for
  6. select primaryKeys.name
  7. from sysobjects primaryKeys, sysconstraints constraintes, sysobjects tables
  8. where tables.xtype = 'U'
  9. and tables.name = 'zMutationValideur'
  10. and constraintes.id = tables.id
  11. and primaryKeys.id = constraintes.constid
  12. and primaryKeys.xtype = 'PK'
  13. open pk
  14. FETCH NEXT FROM pk
  15. INTO @pkname
  16. while @@fetch_status = 0
  17. begin
  18. set @tmp = 'alter table zMutationValideur drop constraint ' + @pkname
  19. exec (@tmp)
  20. FETCH NEXT FROM pk
  21. INTO @pkname
  22. end
  23. CLOSE PK
  24. deallocate pk
  25. go
  26. ALTER TABLE zMutationValideur WITH NOCHECK ADD
  27. CONSTRAINT pk_zMutationValideur PRIMARY KEY  CLUSTERED
  28. (
  29.  valideurMutationId,
  30.  orgid
  31. )
  32. GO


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL Server] Drop primary key

 

Sujets relatifs
Optimisation SQL + question [Réglé][SQL Light] Info ??! please
[SQL] Récuperer une chaine sans les deux premieres lettres ?[SQL] UPDATE dans une requete SELECT ?
Desactiver les PK sous Sql server[SQL] Copie d'un enreg d'une table vers une autre table
[SQL/ADP] Appeler une fonction dans un EtatFormat de date SQL server
Plus de sujets relatifs à : [SQL Server] Drop primary key


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR