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 id=@Seedid  
    select @data2 =data2 from test where id=@Seedid  
    update test1  
       set data4 = geometry::STGeomFromText('POINT (@data1 @data2)', 0)
        where id=@Seedid;  
    -- 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;  

次のエラーが表示されます。

ステートメントは終了されました。
ユーザー定義ルーチンまたは集計 "geometry" の実行中に .NET Framework エラーが発生しました:
System.FormatException: 24141: 入力の位置 13 に数値が必要です。入力には @data1 があります。

4

1 に答える 1

1

いくつかの努力の後、私は最終的にこの問題の解決策を見つけました。他の誰かがそのような問題に再び遭遇した場合の解決策を投稿します。Geometry で と を渡し@data1ているとき@data2、それらの変数はfloat 値@data1だけではありません。だから、私たちができることは次のとおりです。

select @data1 =data1 from test1 where id=@Seedid  
select @data2 =data2 from test1 where id=@Seedid  
Set @POINTSTR = 'POINT(' + CAST(@data1 AS varchar(32)) + ' ' + CAST(@data2 AS varchar(32)) + ')';  
update test1  set data4 = geometry::STGeomFromText(@POINTSTR, 4326) where id=@Seedid;  
于 2013-02-12T18:02:14.057 に答える