Sql-Server

如何插入 TABLE 變數?

  • January 19, 2018

我想在表變數中儲存 2 個座標點(緯度、經度)。

我努力了:

declare @coordinates table(latitude1 decimal(12,9), 
                          longitude1 decimal(12,9), 
                          latitude2 decimal(12,9), 
                          longitude2 decimal(12,9)) 

select latitude, 
      longitude into @coordinates 
from   loc.locations 
where  place_name IN ('Delhi', 'Mumbai')
select @coordinates

它顯示錯誤:

消息 102,級別 15,狀態 1,第 2 行“@coordinates”附近的語法不正確。

選擇查詢的結果:

select latitude, 
      longitude 
from   loc.locations 
where  place_name IN ('Delhi', 'Mumbai')

是:

latitude    longitude
28.666670000    77.216670000
19.014410000    72.847940000

如何將值儲存在表數據類型中?

我執行了查詢SELECT @@VERSION並得到了結果:

Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64) Apr 29 2016 23:23:58 版權所有 (c) Microsoft Corporation Standard Edition (64-bit) o​​n Windows 10 Enterprise 6.3 (Build 16299: )

使用這個:

DECLARE @coordinates TABLE (
   latitude1 DECIMAL(12,9),
   longitude1 DECIMAL(12,9)
) 

INSERT into @coordinates
SELECT
   latitude, 
   longitude
FROM loc.locations 
WHERE place_name IN ('Delhi', 'Mumbai');

SELECT * FROM @coordinates

筆記:

  1. 您創建了 4 列具有NOT NULL行為,但您只插入 2 列。它將返回一個錯誤。
  2. 使用INSERT INTO而不是SELECT INTO. 表已創建。
  3. SELECT..FROM在呼叫 DECLARE 表時使用。

這些是空間座標,因此您應該將它們與空間地理點一起儲存

CREATE TABLE t (
 pt1 geography,
 pt2 geography
);

INSERT INTO t (pt1,pt2) VALUES 
(
 geography::Point(77.216670000, 28.666670000, 4326),
 geography::Point(72.847940000, 19.014410000, 4326)
);

SELECT  pt1.STAsText() AS pt1, pt1.STAsText() AS pt2
FROM t;

pt1                        pt2
POINT (28.66667 77.21667)  POINT (28.66667 77.21667)

第三個參數 (4326) 是空間參考標識符(SRID)。“SRID 對應於基於用於…映射的特定橢球的空間參考系統。” SQL Server 目前僅支持這一值。

注意,如果它們是方向,即 pt1-pt2 代表飛機路線或其他東西,我會使用 aLine代替,

也可以看看,

引用自:https://dba.stackexchange.com/questions/195763