2014-12-06 54 views

回答

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」 S和 「101」 目前限制所產生的記錄數。

如果您認爲合適,請發表評論或延長您的問題。

4

晚的答案,但可能是有用的線程遊客:

如果你想使用T-SQL命令 - 這很好,但採用的代碼添加到您的需求可能會非常耗時。我建議爲此使用一些第三方工具,並且其中大部分工具都具有完整功能的免費試用版(如來自ApexSQLRedgate的SQL測試數據生成器)。

這些工具可以幫助您節省大量時間,因爲它們可以在幾次點擊中創建大量數據。