为什么查询的列类型会根据其值而更改?

时间:2016-05-31 07:30:14

标签: .net sql-server tsql sql-server-2008-r2

我有一个存储函数来计算价格并将其作为浮点数返回:

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

我之前从未遇到过这个问题,它给了我一种奇怪的感觉。

问题:这里发生了什么,我是否必须将每一列投射到所需的数据类型,以确保演员阵容不会中断?

0 个答案:

没有答案