Как я могу сделать соединение с файлом GEOJson и таблицей, которая уже существует в базе данных? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть файл с данными GEOJson, например, так:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-73.759739, 42.61379],
            [-73.759565, 42.614179],
            [-73.752172, 42.614284999999995],
            [-73.744867, 42.617281],
            [-73.743042, 42.628958999999995],
            [-73.74260799999999, 42.631581999999995],
            [-73.734443, 42.631879999999995],
            [-73.733936, 42.632020999999995],
            [-73.73479499999999, 42.636396],
            [-73.73097299999999, 42.643890999999996],
            [-73.759739, 42.61379]
          ],
          [[-73.72579, 42.650059], [-73.725143, 42.649788], [-73.725071, 42.649817], [-73.724823, 42.650282999999995], [-73.72552499999999, 42.650486], [-73.72579, 42.650059]]
        ]
      },
      "properties": { "STATEFP": "36", "UNSDLEA": "09630", "AFFGEOID": "9700000US3609630", "GEOID": "3609630", "NAME": "East Greenbush Central School District", "LSAD": "00", "ALAND": 195779723, "AWATER": 2721773 }
    },
    {
      "type": "Feature",
      "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
          [[[-73.64970199999999, 42.351976], [-73.647074, 42.352069], [-73.647874, 42.353819], [-73.644886, 42.353538], [-73.640999, 42.354502], [-73.640935, 42.350439], [-73.64918399999999, 42.350263], [-73.64970199999999, 42.351976]]],
          [
            [
              [-73.65831, 42.392008],
              [-73.656461, 42.394642],
              [-73.656983, 42.398876],
              [-73.653469, 42.398039999999995],
              [-73.65123799999999, 42.396592],
              [-73.647519, 42.395765],
              [-73.64356599999999, 42.392081],
              [-73.649436, 42.392233],
              [-73.652639, 42.393062],
              [-73.65522, 42.39261],
              [-73.655879, 42.390594],
              [-73.658508, 42.391143],
              [-73.65831, 42.392008]
            ]
          ],
          [
            [
              [-73.77776399999999, 42.424766999999996],
              [-73.775817, 42.429938],
              [-73.774451, 42.435269],
              [-73.77367, 42.44404],
              [-73.773833, 42.449467999999996],
              [-73.77420099999999, 42.451465999999996],
              [-73.77553499999999, 42.451522999999995],
              [-73.776663, 42.452602999999996],
              [-73.77599, 42.454141],
              [-73.777172, 42.455293999999995],
              [-73.77776399999999, 42.424766999999996]
            ]
          ]
        ]
      },
      "properties": { "STATEFP": "36", "UNSDLEA": "15210", "AFFGEOID": "9700000US3615210", "GEOID": "3615210", "NAME": "Kinderhook Central School District (Ichabod Crane)", "LSAD": "00", "ALAND": 202445671, "AWATER": 9611722 }
    }
  ]
}

Как я могу сделать объединение, где я могу выбрать всю запись, например,

{
      "type": "Feature",
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [-73.759739, 42.61379],
            [-73.759565, 42.614179],
            [-73.752172, 42.614284999999995],
            [-73.744867, 42.617281],
            [-73.743042, 42.628958999999995],
            [-73.74260799999999, 42.631581999999995],
            [-73.734443, 42.631879999999995],
            [-73.733936, 42.632020999999995],
            [-73.73479499999999, 42.636396],
            [-73.73097299999999, 42.643890999999996],
            [-73.759739, 42.61379]
          ],
          [[-73.72579, 42.650059], [-73.725143, 42.649788], [-73.725071, 42.649817], [-73.724823, 42.650282999999995], [-73.72552499999999, 42.650486], [-73.72579, 42.650059]]
        ]
      },
      "properties": { "STATEFP": "36", "UNSDLEA": "09630", "AFFGEOID": "9700000US3609630", "GEOID": "3609630", "NAME": "East Greenbush Central School District", "LSAD": "00", "ALAND": 195779723, "AWATER": 2721773 }
    }

, где свойство name изфайл соответствует столбцу имени из моей таблицы ??

Моя таблица выглядит примерно так:

CREATE TABLE SCHOOL_INFO (
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](128) NOT NULL,
    [address] [varchar](128) NOT NULL,
    [city] [varchar](128) NOT NULL,
    [state] [varchar](128) NOT NULL,
    [zip] [varchar](16) NOT NULL,
    [jsondata] [varchar](MAX) NOT NULL
)

Все, что я хочу сделать, это вставить вставить соответствующие данные json в столбец jsondata какстрока.Мне не нужно использовать какие-либо пространственные возможности SQL.

Я выяснил следующий SQL:

Declare @JSON varchar(max)

SELECT @JSON = BulkColumn
 FROM OPENROWSET (BULK 'C:\temp\nyusd.json', SINGLE_CLOB) as j

SELECT * FROM OPENJSON (@JSON, '$.features')

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

Declare @JSON varchar(max)

SELECT @JSON = BulkColumn
 FROM OPENROWSET (BULK 'C:\temp\nyusd.json', SINGLE_CLOB) as j

SELECT * FROM OPENJSON (@JSON, '$.features') where JSON_VALUE(@JSON, '$.features.properties.Name') = 'East Greenbush Central School District';

Может ли кто-нибудь указать мне правильное направление?

Спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Пожалуйста, попробуйте:

Declare @JSON nvarchar(max)

SELECT @JSON = BulkColumn
 FROM OPENROWSET (BULK 'C:\temp\nyusd.json', SINGLE_CLOB) as j


 select *
 From
 (
SELECT * FROM OPENJSON (@JSON, '$.features')
)x
WHERE  JSON_VALUE(x.[value], '$.properties.NAME')  = 'East Greenbush Central School District'
...