[SQL] Primary Key wijzigen

Pagina: 1
Acties:
  • 143 views sinds 30-01-2008
  • Reageer

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-08 22:36
Ik heb (door miscommunicatie met een klant) een tabel waar de primary key nu ineens niet meer uniek is.

Ik gebruik Interbase/Firebird 6

Ik wil deze primary key nu wijzigen, in de meeste SQL dialecten gaat dit met

alter table X drop primary key.

daarna kun je een nieuwe aanmaken.

Maar dit werkt dus niet. Iemand een idee hoe ik dat dan wel voor elkaar ga krijgen?

[ Voor 6% gewijzigd door Pino op 07-05-2003 14:02 ]

"If you don't know where you are going, any road will take you there"


Verwijderd

een pk die niet meer uniek is?

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-08 22:36
Verwijderd schreef op 07 May 2003 @ 14:05:
een pk die niet meer uniek is?
Ik bedoel dat ik nu een andere PK moet hebben, want in de invoer is het nu ineens niet meer uniek.

"If you don't know where you are going, any road will take you there"


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Je kan natuurlijk altijd de zooi naar een nieuwe tabel, met juiste instellingen, kopieren.

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-08 22:36
Gert schreef op 07 May 2003 @ 14:08:
Je kan natuurlijk altijd de zooi naar een nieuwe tabel, met juiste instellingen, kopieren.
Klopt, ik heb alleen weinig zin om dat te doen als het ook anders kan.

"If you don't know where you are going, any road will take you there"


Verwijderd

THEF_Pino schreef op 07 mei 2003 @ 14:02:
Ik heb (door miscommunicatie met een klant) een tabel waar de primary key nu ineens niet meer uniek is.

Ik gebruik Interbase/Firebird 6

Ik wil deze primary key nu wijzigen, in de meeste SQL dialecten gaat dit met

alter table X drop primary key.

daarna kun je een nieuwe aanmaken.

Maar dit werkt dus niet. Iemand een idee hoe ik dat dan wel voor elkaar ga krijgen?
Wat gaat er precies mis ?

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-08 22:36
Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 25
primary
Statement: alter table kosten drop primary key
Hij kent het hele commando dus niet.

"If you don't know where you are going, any road will take you there"


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Problem:
I need to change the datatype of a field that is part of the Primary Key of
a table. Can I do this without destroying the table and rebuilding it?

Solution:
***************************************************************
Note: This information applies to all InterBase versions.
***************************************************************

The SQL standard supplies no syntax for altering the datatype, scale, or length of columns.
The only 'standard compliant' way to alter those characteristics is to delete and recreate the field.
Since you can not delete part of a primary key, the only way to change the primary is to delete
the table.

  • Pino
  • Registratie: Oktober 2001
  • Laatst online: 22-08 22:36
Ok. Dat is dan duidelijk. Toch maar een nieuwe aanmaken dan. Jammer.

"If you don't know where you are going, any road will take you there"


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:19
Het is zowiezo het beste om geen velden te gebruiken die een bepaalde betekenis hebben als primary key.
Het is het best als je een kolom toevoegt aan je tabel die niets anders is dan een numeriek (autonumber) veld, en dat je dat als PK gebruikt.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 15:14

TeeDee

CQB 241

Eventjes een rare aanvulling hierop:

Ik heb ooit in MS SQL het volgende gehad:
Ik moest een table dumpen naar XLS. Alleen maakte ik een foutje en dumpte ik het naar dezelfde server en naar dezelfde table. Ik kreeg hierdoor dubbele pk's.

Ik heb hier zelfs ooit eens een topic voor geopend... de oplossing die ik toen had gedaan was een simpele distinct select, deleten en inserten. (toen nog niet al te thuis in sql en asp)

Hoe kan dit dan? PK's zijn toch uniek?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 01:25

Tomatoman

Fulltime prutser

TeeDee schreef op 07 mei 2003 @ 17:00:
Hoe kan dit dan? PK's zijn toch uniek?
Jawel, maar bugs zijn zeker niet uniek.

Een goede grap mag vrienden kosten.


  • intGod
  • Registratie: Maart 2003
  • Niet online

intGod

Ars non postulat causam

Als je via DTS data exporteert naar een tabel waar al data inzit kan je al eens vreemde bugs tegenkomen of ongewenst gedrag. Data transformaties van/naar sql kan je best met een tSql statement afhandelen.
quote: whoami
Het is het best als je een kolom toevoegt aan je tabel die niets anders is dan een numeriek (autonumber) veld, en dat je dat als PK gebruikt.
Absoluut! Waar ik momenteel werk heeft iemand in een bezopen bui verzonnen om identies overboord te gooien en zelf een volgnummer op te voeren. Dit volgnummer wordt ingevuld aan de hand van een andere tabel waarin een tellertje wordt bijgehouden. In dezelfde bezopen bui is blijkbaar besloten om vervolgens zoveel mogelijk tabellen aan te maken waarbij het veld met de naam 'volgnummer' in voorkomt. Vervolgens is het lekker knutselen om die tabellen aan elkaar te knopen. Drie keer raden wie dit nu achter de rug van het management mag rechtzetten :(

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 15:14

TeeDee

CQB 241

tomatoman schreef op 07 May 2003 @ 18:10:
[...]
Jawel, maar bugs zijn zeker niet uniek.
Ah, zit dat zo dus :)

Maar goed, ik heb er in ieder geval destijds weer wat van geleerd :+

Heart..pumps blood.Has nothing to do with emotion! Bored


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

THEF_Pino schreef op 07 mei 2003 @ 14:09:
Klopt, ik heb alleen weinig zin om dat te doen als het ook anders kan.
Zoveel moeite is dat toch niet? :)

create table new_tabel (...);
insert into new_tabel (velden....) select veldnamen from tabel;
drop table tabel;
alter table new_tabel rename to tabel;

Moet je alleen even uitzoeken hoe je de tabel kan renamen :)
Pagina: 1