Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Generieren von Beispieladressen (https://www.delphipraxis.net/44260-generieren-von-beispieladressen.html)

Zottel 16. Apr 2005 13:47

Datenbank: MSSQL • Version: 2000 • Zugriff über: SDAC/Corelabs

Generieren von Beispieladressen
 
Hi Ihr,
ich steh mal wieder aufm Schlauch....
Ich habe eine AdressTabelle, in der vorname, nachname, Strasse u.s.w. stehen.
Um Testdaten zu generieren, will ich jetzt bei jeder Adresse z.b. den vornamen aus einer anderen Tabelle in zufälliger Reihenfolge nehmen.

mein Versuch:
UPDATE tbl_adressen SET vorname=(SELECT top 1 vorname FROM tbl_vornamen ORER BY newid())
klappt nicht.
er sucht zwar einen vornamen per zufall raus, aber weißt den gleichen jeder adresse zu.
hat einer evtl. ne idee?

Waldteufel 16. Apr 2005 13:50

Re: Generieren von Beispieladressen
 
Hi.

Zitat:

Zitat von Zottel
mein Versuch:
UPDATE tbl_adressen SET vorname=(SELECT top 1 vorname FROM tbl_vornamen ORER BY newid())
klappt nicht.
er sucht zwar einen vornamen per zufall raus, aber weißt den gleichen jeder adresse zu.
hat einer evtl. ne idee?

[edit] -- Was hab ich hier nur für nen Mist geschrieben -- [/edit]

Mit der Subquery stimmt was nicht... Marabu kennt sich mit sowas besser aus als ich...

(übrigens: Die DP hat nen SQL-Code-Formatter. Benutze doch das nächste Mal die [ sql ]-Tags...)

marabu 16. Apr 2005 13:56

Re: Generieren von Beispieladressen
 
Deine SubQuery wird einmal ausgeführt und der dann ermittelte Vornamen wird dann in alle deine Adressen eingetragen - vielleicht nicht so gewollt, aber so hast du es beauftragt.

Zottel 16. Apr 2005 14:14

Re: Generieren von Beispieladressen
 
Zitat:

vielleicht nicht so gewollt, aber so hast du es beauftragt
Gibt es dafür auch ne lösung, den subquery für alle Zeilen einzeln zu machen?

marabu 16. Apr 2005 14:30

Re: Generieren von Beispieladressen
 
Zitat:

Zitat von Zottel
Gibt es dafür auch ne lösung, den subquery für alle Zeilen einzeln zu machen?

Mi einer Stored Procedure kannst Du das.

Aber warum so aufwändig? Reicht nicht auch etwas wie (sinngemäß)

Code:
'Vorname' + STRING(RecNo)

Zottel 16. Apr 2005 15:05

Re: Generieren von Beispieladressen
 
Zitat:

Aber warum so aufwändig? Reicht nicht auch etwas wie (sinngemäß)
ich habe bereits 16 mio kundenadressen. allerdings sind da auch ne menge anderer werte dabei. ich muss die daten jetzt von jemandem bearbeiten lassen und dafür die kundenadressen verstümmeln. bevor ich jetzt die ganzen zusätzlichen daten und verknüpfungen zu anderen tabellen neu aufbaue, setze ich die adressen lieber per zufall neu zusammen und habe dadurch nicht existierende kunden, die aber kundenbezogene daten haben. Somit gibs mit unserem Datenschutzbeauftragten auch keine probleme ;-)

hmm... dann schau ich mir mal an, wie ich das in eine sp reinkriege.....
hast du evtl. nen denkansatz?

Lemmy 16. Apr 2005 15:18

Re: Generieren von Beispieladressen
 
Hi,

Du musst im Prinzip alle Datensätze nacheinander durchgehen und dann Deine Abfrage laufen lassen.

Vielleicht ist es für DIch einfacher ein Programm zu schreiben, das das für Dich erledigt, anch dem Motto:

* Select ID From Adresse;
* Alle ID's durchgehen
* Einen Zufallswert generieren, der auf einen Vornamen / Namen / Straße / Ort verweist
* Die Adresse mit den durch die Zugallszaheln ermittelten Werten zusammensetzen
* Per Update in die Datenbank schreiben.


So kannst Du dann auch alle anderen Tabellen bearbeiten.

Alternative wäre ne StoredProcedure, die in der Ausführungszeit sicherlich etwas schneller wäre, da kenne ich mich im MS SQL-Server aber nicht gut genug aus um Dir zu helfen...

Lemmy

Zottel 16. Apr 2005 15:39

Re: Generieren von Beispieladressen
 
hi lemmy,

das mit dem extra-programm dachte ich mir auch schon. wäre die einfachste lösung. Aber wenn das mit ner SP geht, dann sollte ich lieber versuchen es damit zu machen.
mal schauen, ob ich vielleicht nen beispiel für ne SP finde, die zeilenweise die tabelle ändert.
bisher habe ich noch nichts gefunden :-(
aber der tag ist ja noch lang ;-)

Zottel 16. Apr 2005 16:14

Re: Generieren von Beispieladressen
 
haha,
habs geschafft. Mit ner Sp und mit nem cursor klappt das.
vielen dank

Zottel 16. Apr 2005 16:39

Re: Generieren von Beispieladressen
 
Achso:
sollte es jemanden interressieren, oder er steht vor dem gleichen problem, hier meine, jetzt eingesetzte, Lösung:
SQL-Code:
CREATE PROCEDURE ChangeAdresses AS

declare @adc_New_vorname varchar(250)
declare @adc_id int

declare adccursor cursor for
  select id from adc for read only

open adccursor
while(0=0)
  begin
    fetch next from adccursor into @adc_id
    if (@@fetch_status<>0) break
    set @adc_new_vorname = (select top 1 vorname from vornamen order by newid() )
    update adc set vorname=@adc_new_vorname where id=@adc_id
  end
close adccursor
deallocate adccursor
Sollte jemand eine bessere und schnellere Idee haben, immer her damit ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz