如何生成测试MS SQL地理空间数据

时间:2014-12-06 14:59:31

标签: sql sql-server geospatial

我想在SQL 2012中对地理空间数据进行一些搜索算法的性能测试。

使用以下字段生成X个随机数据点的SQL命令是什么

  1. 经度双倍
  2. 纬度加倍
  3. 地理geography

2 个答案:

答案 0 :(得分:6)

迟到的答案但对线程访问者有用:

如果你想使用T-SQL命令 - 那很好,但是根据你的需要采用代码可能非常耗时。我建议使用一些第三方工具来实现此目的,其中大多数都有一个功能齐全的免费试用版(如ApexSQLRedgate中的SQL测试数据生成器)。

这些工具可以帮助您节省大量时间,因为它们可以在几次点击中创建大量数据。

答案 1 :(得分:1)

这应该让你开始:

CREATE TABLE NumberTable
  (
    number INT
  );

;WITH Numbers(number) AS
(SELECT 1 AS number
 UNION ALL
 SELECT number + 1 FROM Numbers WHERE number < 100
)
INSERT INTO NumberTable (number)
  SELECT N1.number + ((N2.number - 1) * 100)
    FROM Numbers N1, Numbers N2 OPTION(MAXRECURSION 100);

CREATE TABLE MyData 
  (
    id INT IDENTITY PRIMARY KEY,
    longitude DECIMAL(7, 4),
    latitude DECIMAL(6, 4),
    location GEOGRAPHY
  );

INSERT INTO MyData (longitude, latitude)
  SELECT CAST(NEWID() AS BINARY(8)) % 1800000 * 0.0001,
    CAST(NEWID() AS BINARY(8)) % 900000 * 0.0001 FROM NumberTable WHERE number < 101;

UPDATE MyData
SET location =
      geography::STPointFromText(
        CONCAT('POINT (',
               CONVERT(VARCHAR(20), longitude),
               ' ',
               CONVERT(VARCHAR(20), latitude),
               ')'),
        4326)
WHERE location IS NULL;

SELECT
  id
  , longitude
  , latitude
  , location.STAsText() locationAsText
FROM MyData;

SQL Fiddle

当心“100”和“101”目前限制生成的记录数。

如果您认为合适,请发表评论或扩展您的问题。