1

我有一个动态 SQL SP,它作用于动态创建的表。

该 SP 动态生成的特定查询如下所示:

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

请注意,该列[RATE]的类型为Float

[RATE]但是,对于列类型为 的另一个动态创建的表,相同的查询失败Int。我知道这是因为参数周围的单引号。

这种行为差异的原因是什么?

4

2 回答 2

1

您正在强制进行隐式转换以使数据类型匹配。这都是关于类型优先级的

对于一float列,我们有数据类型floatvarchar. float获胜,我们尝试将'0.0'and转换'10.0'floats 并成功。

对于一int列,我们有数据类型intvarchar. int获胜,我们尝试将'0.0'and转换'10.0'ints 并失败。

如果没有引号,对于一int列,我们有数据类型intdecimal. decimal获胜,我们尝试将int列值转换为decimal并成功。

于 2013-12-11T07:16:24.193 回答
0

尝试将值“0.0”和“10.0”转换/转换为 int

对于 [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'
于 2013-12-11T07:19:20.973 回答