Люди,Геометрия SQL :: STGeomFromText ошибка бросания и прекращение работы
Получил нечетный для вас.
У меня есть хранимая процедура, которую я использую для анализа некоторых табличных данных для создания правильных объектов геометрии SQL.
SP использует функцию MakeValid().
В моем случае я нашел несколько объектов, которые не прошли тест. Однако они не нарушают хранимую процедуру. Хранимая процедура с удовольствием запускается и просто показывает ошибку в результатах.
Сообщ 6522, уровень 16, состояние 1, строка 257 .NET Framework произошла ошибка во время выполнения определяемой пользователем подпрограммы или статистической "геометрии": System.FormatException: 24306:
Однако, когда я выполняю этот SP в запланированном задании, при первом обнаружении одного из этих исключений задание терпит неудачу, и SP перестает работать.
На самом деле я не уверен, что делать. Я пробовал блок TRY..CATCH, но это не останавливает возникшую ошибку, и работа завершается в любом случае.
Так что, хотя это функция MakeValid, которая вызывает ошибку, я бы предположил, что SP, который сталкивается с ошибкой функции, вызовет ту же проблему.
Любые мысли, как я могу справиться с этим? BTW У меня нет контроля над качеством ввода, кроме как для того, чтобы помечать ошибки, а затем возвращаться и восстанавливать их. Мне все равно хотелось бы, чтобы остальные действительные записи были обработаны.
Вот действующий раздел кода.
SET @GEOM = geometry::STGeomFromText(@GEOMWKT, 4326)
IF @GEOM.STIsValid() = 0
BEGIN
BEGIN TRY
SET @GEOM = @GEOM.MakeValid()
END TRY
BEGIN CATCH
Print 'Error here'
END CATCH
END
Ниже приведен пример недопустимой геометрии, которая вызывает ошибку.
SET @GEOM = geometry::STGeomFromText('LINESTRING(-121.895652 37.37225, -121.895652 37.37225)', 4326)
Спасибо за любую помощь.
Вы проверяете '@ GEOM', но делаете операции против' @ VALGEOM'. Это ваше намерение? –
Орехи. Это было бы самым простым решением. Можете ли вы предоставить простой WKT, который производит эту ошибку? –
Ben вот пример синтаксиса, который вызывает ошибку. SET @GEOM = геометрия :: STGeomFromText ('LINESTRING (-121.895652 37.37225, -121.895652 37.37225)', 4326) Также добавлен в исходный вопрос. – Andye