Или я бы указал другие предикаты, которые должны «отфильтровывать» значения, которые не следует преобразовывать.

есть SQL, который выполняет функцию CAST (для FLOAT) в ColumnA. SQL имеет фильтр, который в конце концов косвенно отфильтрует те строки, которые имеют нечисловые значения в ColumnA. Однако из-за того, что, по моему мнению, происходит из-за запуска частей SQL в paralell, я считаю, что CAST даже применяется к отфильтрованным строкам, и это приводит к сбою SQL при «невозможности приведения значения как float ...» "

Я знаю, что если я запускаю с одним процессом, добавив подсказку запроса

OPTION (MAXDOP 1)

что SQL работает как ожидалось. Я подозреваю, что при запуске в 1 proc принудительно будет применен фильтр, чтобы отсеять строку с нечисловыми значениями в columnA так, чтобы CASTING его значений был успешным. Я также обнаружил, что с помощью подсказки запроса

OPTION (FORCE ORDER)

Я полагаю, что это решает проблему, потому что это также гарантирует, что фильтр будет применен в первую очередь, и я получаю гораздо лучшую производительность запросов, чем при работе на одном цилиндре.

Я склоняюсь к решению проблемы, используя второй вариант. Если у меня возникнут какие-либо неправильные представления о том, что здесь происходит, или если кто-то захочет изложить мои общие соображения или дать рекомендации, я был бы признателен.

Я бегу на

Microsoft SQL Server 2008 R2 (окончательная первоначальная версия) - 10.50.1720.0 (X64) 12 июня 2010 г. 01:34:59 Авторское право (c) Microsoft Corporation Enterprise Edition (64-разрядная версия) в Windows NT 5.2 (сборка 3790: пакет обновления 2)

Запоздалая мысль:

Кажется, было бы неплохо, если бы T-SQL имел следующие функции, чтобы проверить, можно ли преобразовать строку в конкретный тип данных.

IsFloat IsNumeric IsInteger и т. Д.

Я действительно раздражен тем, сколько столбцов всех видов данных, которые я нахожу в нашей базе данных, которые определены как varchar (255). Я думаю, что решение "не делать этого!"

Ответы на вопрос(2)

Ваш ответ на вопрос