Я пытаюсь преобразовать базу данных MySQL в Sql Azure. Когда я загружаю метаданные одного из моих баз данных, я получаю удалось выполнить синтаксический анализ ошибок:Parse Failed with SQL Server Migration Assistant
MySql Server Object Collector error: function : pointInPoly Loading SQL definition or parsing failed for function 'pointInPoly'.
код функции является:
BEGIN
DECLARE p POINT;
DECLARE poly POLYGON;
DECLARE n INT DEFAULT 0;
DECLARE pX DECIMAL(9,6);
DECLARE pY DECIMAL(9,6);
DECLARE ls LINESTRING;
DECLARE poly1 POINT;
DECLARE poly1X DECIMAL(9,6);
DECLARE poly1Y DECIMAL(9,6);
DECLARE poly2 POINT;
DECLARE poly2X DECIMAL(9,6);
DECLARE poly2Y DECIMAL(9,6);
DECLARE i INT DEFAULT 0;
DECLARE result INT(1) DEFAULT 0;
SET p = GEOMFROMTEXT(in_point);
SET poly = GEOMFROMTEXT(in_polygon);
IF ISNULL(p) OR ISNULL(poly) THEN
RETURN -2;
END IF;
SET pX = X(p);
SET pY = Y(p);
SET ls = ExteriorRing(poly);
SET poly2 = EndPoint(ls);
SET poly2X = X(poly2);
SET poly2Y = Y(poly2);
SET n = NumPoints(ls);
WHILE i<n DO
SET poly1 = PointN(ls, (i+1));
SET poly1X = X(poly1);
SET poly1Y = Y(poly1);
IF ((((poly1X <= pX) && (pX < poly2X)) || ((poly2X <= pX) && (pX < poly1X))) && (pY > (poly2Y - poly1Y) * (pX - poly1X)/(poly2X - poly1X) + poly1Y)) THEN
SET result = !result;
END IF;
SET poly2X = poly1X;
SET poly2Y = poly1Y;
SET i = i + 1;
END WHILE;
RETURN result;
END
Что будет лучше? пойти с преобразованием для всех других данных и создать новую функцию MSSQL для pointInPoly или исправить проблему на конец MySQL, а затем завершить миграцию?
Вещь, я совершенно не знаком с MSSQL. Не знаете, как это работает с пространственным типом данных. Функция предполагает возврат true, если точка находится внутри многоугольника, возможно, есть лучший способ сделать это на MSSQL?
, который в конце концов кажется правильным решением. К сожалению, я сейчас в процессе миграции, у которого есть много вещей, которые можно охватить, как вы можете себе представить. Если я смогу облегчить работу «мигрировать» и **, то ** ввести в пространственные типы данных было бы здорово. Я ценю ваше предложение, а не точно, в какой момент я сейчас. Текущие данные в базе данных MySQL и типы имеют varchar для точек и mediumtext для полигонов, поэтому я не думаю, что это «родной». Пример содержимого: 'POINT (-34.892408 -56.161938)' –