2013-09-16 4 views
0

Я пытаюсь преобразовать базу данных 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?

ответ

0

если это собственные пространственные данные, то используйте пространственные типы данных данных! Базы данных Windows Azure SQL поддерживают пространственные данные и являются более сбалансированным типом данных для того, что вы делаете. чтобы узнать больше о SQL Server, SQL-базах данных на Azure и пространственных данных, прочитайте следующее: http://msdn.microsoft.com/en-us/library/windowsazure/ff759530.aspx и http://technet.microsoft.com/en-us/library/bb933790(v=sql.105).aspx (доступно с SQL 2008 и выше)

+0

, который в конце концов кажется правильным решением. К сожалению, я сейчас в процессе миграции, у которого есть много вещей, которые можно охватить, как вы можете себе представить. Если я смогу облегчить работу «мигрировать» и **, то ** ввести в пространственные типы данных было бы здорово. Я ценю ваше предложение, а не точно, в какой момент я сейчас. Текущие данные в базе данных MySQL и типы имеют varchar для точек и mediumtext для полигонов, поэтому я не думаю, что это «родной». Пример содержимого: 'POINT (-34.892408 -56.161938)' –