2013-02-09 4 views
1
ALTER PROCEDURE dbo.StoredProcedure1  
AS 
DECLARE @Seedid int, @data1 float, @data2 float, @g geometry 

DECLARE member_cursor CURSOR FOR 
SELECT id from test1 ; 

OPEN member_cursor; 

FETCH NEXT FROM member_cursor 
INTO @Seedid ; 
WHILE @@FETCH_STATUS = 0 
BEGIN 
    select @data1 =data1 from test where [email protected] 
    select @data2 =data2 from test where [email protected] 
    update test1 
     set data4 = geometry::STGeomFromText('POINT (@data1 @data2)', 0) 
     where [email protected]; 
    -- This is executed as long as the previous fetch succeeds. 
    FETCH NEXT FROM member_cursor 
    INTO @Seedid ; 
END 
RETURN 
CLOSE member_cursor; 
DEALLOCATE member_cursor; 

Je reçois l'erreur suivante:erreur SQL en utilisant la fonction de la géométrie MySQL

The statement has been terminated.
A .NET Framework error occurred during execution of user-defined routine or aggregate "geometry":
System.FormatException: 24141: A number is expected at position 13 of the input. The input has @data1.

Répondre

1

Après un certain effort, j'ai finalement trouvé la solution à ce problème. Poster la solution si quelqu'un d'autre rencontre de nouveau ce problème. En géométrie lorsque je passe @data1 et @data2, ses variables comme @data1 seulement pas son valeur flottante. Ainsi, ce que nous pouvons faire est suivant:

select @data1 =data1 from test1 where [email protected] 
select @data2 =data2 from test1 where [email protected] 
Set @POINTSTR = 'POINT(' + CAST(@data1 AS varchar(32)) + ' ' + CAST(@data2 AS varchar(32)) + ')'; 
update test1 set data4 = geometry::STGeomFromText(@POINTSTR, 4326) where [email protected]; 
+0

Merci de poster ce message! J'aurais dû réaliser que j'avais besoin de convertir les points (flottants dans mon cas) en texte avant de les passer dans la fonction '... FromText()' :). – Derek

Questions connexes