[SQL Server] Drop primary key

Drop primary key [SQL Server] - SQL/NoSQL - Programmation

Marsh Posté le 04-02-2005 à 10:03:34    

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 ?

Reply

Marsh Posté le 04-02-2005 à 10:03:34   

Reply

Marsh Posté le 04-02-2005 à 10:17:26    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed