Führen Sie SQL Server-Funktion für jede Zeile in der Tabelle

Ich habe eine Funktion, die iteriert "für jede Zeile" in der Tabelle. Wenn es ausgeführt wird, es sollte in jeder Zeile, ziehen Sie die zugehörigen Werte für die Zeile und führen die Funktion aus, die in Kurven, gibt ein Ergebnis zurück und aktualisiert die richtige Zeile mit dem richtigen Wert. Was geschieht, ist, dass es ausgeführt wird, und die Rückgabe der Wert der letzten Zeile und aktualisiert die Zeile mit diesem Wert. Irgendwelche Ideen was ich falsch mache?

SELECT 
     RowNum = ROW_NUMBER() OVER(ORDER BY ID)
     ,*
INTO #Geo
FROM DDDG

DECLARE @MaxRownum INT
SET @MaxRownum = (SELECT MAX(RowNum) FROM #Geo)

DECLARE @Iter INT
SET @Iter = (SELECT MIN(RowNum) FROM #Geo)

WHILE @Iter <= @MaxRownum
BEGIN
     SELECT *
     FROM #Geo
     WHERE RowNum = @Iter

    DECLARE @address nvarchar (100);
    Select @address =  Ad1 from DDDG where id = @Iter;

    DECLARE @state nvarchar (100);
    SET @state = 'FL';

    DECLARE @zip nvarchar (100);
    SET @zip = '33142';

    DECLARE @city nvarchar (100);
    SET @city = 'Miami';

    DECLARE @nation nvarchar (2);
    SET @nation = 'us';

    DECLARE @g geography;

    WAITFOR DELAY '00:00:00.050'
    SET @g = dbo.Geocode(@nation, @state, @city, @zip, @address);

    Update DDDG 
    Set Lat = @g.Lat 
    where id = @Iter;

    Update DDDG 
    Set long = @g.Long 
    where id = @Iter;

     SET @Iter = @Iter + 1
END

DROP TABLE #Geo

Update .....

danke an alle... mich hat es fast funktioniert.. Nach eine Hölle der eine Menge von Versuch und Irrtum habe ich herausgefunden, dass ich brauchte, um zu ändern Sie die folgenden

Update DDDG Set Lat = @g.Lat where id = id;
Update DDDG Set long = @g.Long where id = id;

Ich habe nur ein problem jetzt. Wenn ich die Zeilen löschen die RowNum-und die @Iter nicht mehr überein. gibt es eine Möglichkeit, dies zu beheben problem andere als die Neuerstellung der Tabelle jedes mal?

  • Sollten Sie überarbeiten die Logik zu beseitigen die Schleife...SQL ist eine set-basierte Sprache und führt sehr schlecht wie diese. Es Griffe viel besser, wenn Sie Locker die lineare Linie des Denkens, ein Skript zu aktualisieren, werden alle Zeilen, keine Schleife.
  • Sind Sie sicher, dass der Geocode-Funktion nicht einfach wieder die gleiche Breite und Länge für jede Adresse?
  • Ich bin sicher, (Dr. Wily Frage)und da für einen besseren Weg habe ich auf diese für nur 6 Monate oder so.. wenn Sie mir zeigen, einen besseren Weg.... im all für Sie
InformationsquelleAutor user3266908 | 2014-02-04
Schreibe einen Kommentar