2013-09-02 4 views
1

Я новичок в пространственных типов данных и SQL сервер, а также, у меня есть следующие таблицы:SQL процедура сервера хранятся пространственные данные

  • Table (A) ZipCodesUSA

    • Колонки: zipcodes| latitude| longitude| city| state

  • Таблица (Б) US_Cities_longitude_Latitude

    • Колонна: ID int| City nvarchar(40)| Coordinates GEOGRAPHY|

То, что я пытаюсь сделать, это создать SPROC перенести все данные из таблицы A в B и изменения в ГЕОГРАФИЮ, когда государство. Он изменяет, но только 1 строка для каждого состояния. Зачем? Я не указал SELECT 1 или что-то еще. Заранее спасибо!

ALTER PROC dbo.USA_Cities 
@StateAbbr NVARCHAR(2) 
AS 
BEGIN 

    SET NOCOUNT ON; 

    DECLARE @City NVARCHAR(30) 
    DECLARE @Longitude NVARCHAR(50) 
    DECLARE @Latitude NVARCHAR(50) 

    SELECT @City = City, @Longitude= Longitude,@Latitude= Latitude 
    FROM ZipCode 
    WHERE StateAbbr = @StateAbbr 


    INSERT INTO dbo.US_Cities(City, Coordinates) 
    VALUES(@City, geography::Point(ISNULL(@Longitude, ''),ISNULL(@Latitude, ''), 4326)) 

END; 


EXEC dbo.USA_Cities 'NY' 
+0

Что такое метод «география ::», известный как и где я могу найти документацию для остальных? Являются ли они удобными методами? – WiteCastle

ответ

3

Следующий код:

SELECT @City = City, @Longitude= Longitude,@Latitude= Latitude 
FROM ZipCode 
WHERE StateAbbr = @StateAbbr; 

только выбирает одну строку для каждого состояния - не все строки для государства. Вам нужно либо поместить это в петлю, или замените select и insert с:.

INSERT INTO dbo.US_Cities(City, Coordinates) 
    SELECT @City = City, 
      geography::Point(ISNULL(Longitude, ''), ISNULL(Latitude, ''), 4326) 
    FROM ZipCode 
    WHERE StateAbbr = @StateAbbr; 
+2

Не рекомендуется использовать петлю (RBAR). – siride

+0

СООБЩЕНИЯ ОШИБКИ: оператор SELECT, который присваивает значение переменной, не должен комбинироваться с операциями по извлечению данных. – simon

+0

Оператор INSERT не может содержать инструкцию SELECT, которая присваивает значения переменной. – simon

0

CREATE PROC [DBO] [USA_CitiesModified] @StateAbbr NVARCHAR (2) AS НАЧАТЬ

SET NOCOUNT ON;  

INSERT INTO dbo.US_Cities(City, Coordinates) 
SELECT City, geography::Point(ISNULL(Longitude, ''),ISNULL(Latitude, ''), 4326) 
FROM dbo.ZipCode 
WHERE StateAbbr = @StateAbbr 

END;

РАБОТАЕТ БОЛЬШИЕ, СПАСИБО!

Смежные вопросы