Toon posts:

[MS SQL] Tabel kopieeren, IDENTITY verwijderen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik probeer een kopie van de stuctuur EN inhoud van een bestaande tabel te maken. De meest eenvoudige manier is
code:
1
2
3
SELECT *
INTO [nieuwe_tabel_naam]
FROM [brontabel]

Op deze wijze wordt de structuur (zonder PK en FK constraints) en de data keurig gekopieerd naar een nieuwe tabel.

Nu wil ik graag van een (eventueel) auto-increment veld af. Heeft iemand een eenvoudige manier (graag een stukje T-SQL script) om van een gegeven tabel de identity-property van het auto-increment veld af te halen.

Ik ben wel oplossingen tegen gekomen, maar daarvoor moest je ook de kolomnaam van het auto-increment veld weten. In mijn situatie weet je die niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Zonder naam kan je het dus niet afaik.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 25 augustus 2004 @ 14:42:
Zonder naam kan je het dus niet afaik.
Nou... ik denk dat het op zich wel kan, maar m'n huidige 'oplossing' lijkt me zo omslachtig. Het huidge strijdplan:

- Haal uit de meta data alle kolomnamen op van de gegeven tabel en zet deze in een cursor
- Loop door de kolomnamen heen en vraag op de een of andere manier op of de identity property geset is (volgens mij is dit vrij lastig op te halen uit de systeemtabellen, maar kan vast op de een of andere manier)
- Voer deze procedure uit die hier beschreven staat

Maar dit moet toch eenvoudiger/makkelijker/netter kunnen? Toch? :o

edit:

Overigens, als iemand een andere manier weet om met behulp van T-SQL de inhoud en structuur van een tabel te kopieeren (zonder PK, FK's en identity property), dan ben ik daar natuurlijk ook erg gelukkig mee.

[ Voor 14% gewijzigd door Verwijderd op 25-08-2004 14:56 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:01
Ja, zo is het idd mogelijk. Maar hoe jij het anders zou willen doen - zonder dat je de naam weet - is volgens mij onmogelijk.
Je hebt de columnnaam nodig om die te kunnen wijzigen.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 25 augustus 2004 @ 14:56:
Ja, zo is het idd mogelijk. Maar hoe jij het anders zou willen doen - zonder dat je de naam weet - is volgens mij onmogelijk.
Je hebt de columnnaam nodig om die te kunnen wijzigen.
Ja daar heb je gelijk in. Aan de ene kant hoop ik dat er een andere manier is om de structuur van een tabel te kopieren (wel datatypes/lengtes van velden, maar zonder identity, default values e.d.).

Stel dat dit niet mogelijk is, zit je idd aan het cursor verhaal vast. Dan nog vind ik de laatste stap in m'n vorige post nogal omslachtig lijken.

Misschien kan het niet anders, maar onder het motto van 'wie niet waagt' ;)

Verwijderd

Topicstarter
Goed... ik heb 'een' oplossing. Het blijkt als je een SELECT INTO doet, waarbij je de data uit meerdere tabellen haalt, er geen identity fields gezet worden. Dit omdat er natuurjk maar 1 identity veld in een tabel mag zijn, en hij dus niet kan weten welke te nemen (als er meerdere zijn).

Om dus een kopie van de data en de structuur -zonder PK, FK, en identity veld- van een tabel te maken (voor degene die het ook ooit nodig mocht hebben) kun je dus de volgende truuk uithalen:

code:
1
2
3
4
SELECT [brontabelnaam].* 
INTO [nieuwe_tabelnaam]
FROM [brontabelnaam]
CROSS JOIN (SELECT NULL AS ZomaarEenVeldnaam) AS TempTable


Amen :+
Pagina: 1