Sql十进制值不存储在临时表中

时间:2015-09-02 10:18:02

标签: sql-server-2008

我正在根据我的数据库中的另一个表创建空的临时表,并添加一个额外的列(PRICE),我试图从查询填充,

SELECT TOP 0 ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RowNumber, 
 ID, 
 NULL AS PRICE 
 INTO #TMP_TABLE 
 FROM SQL_TABLE

当我将此表填充为INSERT INTO #TMP_TABLE ...时,我在PRICE列中获得的值为0或1,但是当我单独执行查询时,我将获得十进制值(如{{1} })。

如何在上面的临时表中存储小数值?或者有没有其他方法来创建空的临时表?

2 个答案:

答案 0 :(得分:2)

使用CREATE TABLE并定义明确列类型

CREATE TABLE #TMP_TABLE(RowNumber INT, ID <you_type>, Price <your_type>)

NULL的默认值为INT,请检查:

SELECT x = NULL INTO #x;
EXEC tempdb..sp_columns '#x';

因此,您的分数会隐式转换为INT

未来的一个好规则明显总是比隐含更好

答案 1 :(得分:1)

您要么使用create table语句创建表:

{
    "cars": {
        "Nissan": {
            "Sentra": {
                "doors": 4,
                "transmission": "automatic"
            },
            "Maxima": {
                "doors": 4,
                "transmission": "automatic"
            }
        },
        "Ford": {
            "Taurus": {
                "doors": 4,
                "transmission": "automatic"
            },
            "Escort": {
                "doors": 4,
                "transmission": "automatic"
            }
        }
    }
}

或者如果你坚持使用select into声明数据类型:

create table #TMP_TABLE 
( RowNumber int 
, ID <whatever datatype>
, PRICE numeric(10,2)
);