我有一个动态SQL SP,它可以作用于动态创建的表。
此SP动态生成的特定查询如下:
SELECT * FROM [DYNAMIC_TABLE] WHERE [RATE] BETWEEN '0.0' AND '10.0'
请注意,[RATE]
列的类型为Float
。
但是,对于[RATE]
列类型为Int
的另一个动态创建的表,同一查询失败。我知道这是因为参数周围有单引号。
这种行为差异的原因是什么?
答案 0 :(得分: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
并成功。
答案 1 :(得分:0)
尝试将值'0.0'和'10 .0'转换/转换为int
[Rate]的是Float
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'