невозможно преобразовать значение как float

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

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

OPTION (MAXDOP 1)

, то SQL будет работать должным образом. Я подозреваю, что запуск в 1 процессе заставляет применить фильтр, чтобы отсеять строку с нечисловыми значениями в столбце A, чтобы ПРИЛИТИЕ ее значений прошло успешно. Я также обнаружил, что использование подсказки запроса

OPTION (FORCE ORDER)

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

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

Я использую

Microsoft SQL Server 2008 R2 (RTM) - 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). Думаю, решение - «не делать этого!»

5
задан ChadD 25 August 2011 в 14:52
поделиться