我正在根据我的数据库中的另一个表创建空的临时表,并添加一个额外的列(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} })。
如何在上面的临时表中存储小数值?或者有没有其他方法来创建空的临时表?
答案 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)
);