ステートメントの更新 - 地理的な列 - SQLサーバー

SQL Serverの地理的な列を通常のフィールド(varchar ....)よりも更新するのは違うのですか?これを行うためのサンプル文を提供してください。ありがとう。

6

2 答え

これがあなたが探している答えであるかどうかはわかりませんが、私が言うように、主な違いは、「通常のフィールド」を更新するときに、通常は新しい値を直接提供することです。

UPDATE mytable SET name = 'John' WHERE id = 1

地理的な列を更新するときは、おそらく値を直接与えることはできません(地理情報をエンコードする非常に長い16進数なので)。しかし、他の値から計算することもできます同じ表の列)、たとえば:

UPDATE mytable SET gps=geography::STPointFromText('POINT(' + lng + ' ' + lat + ')', 4326) 

ここで lng lat はGPS座標を「人間が読める形式」で指定するvarchar値です( lat = '48 .955790 ' > lng = '20 .524500 ') - この場合は、 mytable の列でもあります。

13
追加された
ありがとう、私はこれらの地理データ型がどのように働いているのか分かりませんでした。どうやらSql Server 2008 R2のインポート/エクスポートウィザードは理解できません。この列を含むテーブルを別のデータベースにインポートすることはできません。
追加された 著者 Chris Smith,
私はこの答えに数年後に戻り、POINT()コールにLONGとLATのパラメータ順序を推測しました。これは正しい順序であり、興味深いことですが、MSがLONG/LATを使用するのは、私たちのほとんどが緯度/経度で表現する方法とは対照的です。詳細はこちら stackoverflow.com/q/27297113/194872
追加された 著者 Chris Smith,

小数として緯度経度がある場合は、次のように地理情報の列を更新できます。

DECLARE @latitude DECIMAL(15,6)
    ,@longitude DECIMAL(15,6);

SET @latitude = 29.938580;
SET @longitude = -81.337384;

UPDATE Properties
SET Geog = GEOGRAPHY::Point(@latitude, @longitude, 4326)
WHERE PropertyID = 858;
0
追加された