我有一个存储函数来计算价格并将其作为浮点数返回:
ALTER FUNCTION [dbo].[product_get_GrossPrice] (@pid INTEGER)
RETURNS FLOAT
AS BEGIN
DECLARE @ret AS FLOAT
SELECT
@ret = (ROUND((price * (CAST(1 AS FLOAT) + (CAST(ISNULL(tax, 0) AS FLOAT) / CAST(100 AS FLOAT)))), 0))
FROM
products
WHERE
id = @pid
RETURN @ret
END
此函数用于以下查询:
SELECT
p.*, dbo.product_get_GrossPrice(p.id) as gross_price
FROM
products
ORDER BY
id
在Web服务器上,以下代码用于读取列gross_price
:
double? grossPrice = dataRow.Field<double?>("gross_price");
这样可以正常工作,直到查询在列中仅返回0和1。似乎如果是这种情况,列会自动变成布尔值并且转换失败。
所以我要解决的问题是我将查询更改为:
select p.*, cast(dbo.product_get_GrossPrice(p.id) as float) as gross_price
from products
order by id
我之前从未遇到过这个问题,它给了我一种奇怪的感觉。
问题:这里发生了什么,我是否必须将每一列投射到所需的数据类型,以确保演员阵容不会中断?