2013-12-11 4 views
1

У меня есть динамический SQL SP, который действует на динамически создаваемые таблицы.Поведение Datatype SQL Server Float

конкретный запрос, что этот SP динамически генерирует задаются как:

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0' 

Обратите внимание, что столбец [RATE] имеет типа Float.

Однако этот же запрос не выполняется для другой динамически созданной таблицы, в которой столбцы [RATE] имеют тип Int. Я понимаю, что это из-за одиночных кавычек вокруг параметров.

В чем причина этой разницы в поведении?

ответ

1

Вы вынуждаете неявное преобразование, чтобы совместить типы данных. Это все о type precedence

Для float колонки, у нас есть типы данных, float и varchar. float выигрывает, и мы пытаемся преобразовать '0.0' и '10.0' в float и успешно.

Для столбца int у нас есть типы данных int и varchar. int выигрывает, и мы пытаемся преобразовать '0.0' и '10.0' в int и сбой.

Без кавычек, для столбца int, имеются типы данных int и decimal. decimal выигрывает, и мы пытаемся преобразовать значения столбца int в decimal и преуспеть.

0

попытаться преобразовать/отливать значение '0.0' и '10 .0' в целое

для [Rate] является Поплавок

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0' 

для [Rate] является Int

SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN convert(int, '0.0') AND convert(int, '10.0')' 

или

SELECT * FROM [DYNAMIC_TABLE] WHERE convert(float, [RATE]) BETWEEN '0.0' AND '10.0' 
+0

Ваше исправление, но приведенное выше является ответом fo Это так. –

Смежные вопросы