Question

I have a dynamic SQL SP that acts on dynamically created tables.

A particular query that this SP dynamically generates is given as:

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

Note that the column [RATE] is of type Float.

However the same query fails for another dynamically created table in which the [RATE] columns is of type Int. I understand that this is because of the single quotes around the parameters.

What is the reason for this behavior difference?

Was it helpful?

Solution

You're forcing an implicit conversion to occur to make the data types match. This is all about type precedence

For a float column, we have the data types float and varchar. float wins, and we attempt to convert '0.0' and '10.0' to floats and succeed.

For an int column, we have the data types int and varchar. int wins, and we attempt to convert '0.0' and '10.0' to ints and fail.

Without the quotes, for an int column, we have the data types int and decimal. decimal wins, and we attempt to convert the int column values to decimal and succeed.

OTHER TIPS

try to convert/cast the value '0.0' and '10.0' to int

for [Rate] is Float

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

for [Rate] is Int

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

or

SELECT * FROM [DYNAMIC_TABLE] WHERE convert(float, [RATE]) BETWEEN '0.0' AND '10.0'
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top