2015-09-02 32 views
1

我創建基於我的分貝另一臺空的臨時表和添加而我試圖從查詢來填充一個額外的列(PRICE),的Sql十進制值,不是佔有存儲在臨時表

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,但是當我單獨執行查詢時,我得到十進制值(如0.0634)。

我如何在上面的臨時表中存儲小數值?或者有沒有其他的方式來創建空的臨時表?

回答

2

使用CREATE TABLE和定義明確列類型

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

默認爲NULLINT,檢查:

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

所以,你的分數被隱式轉換爲INT

一個很好的規則爲未來顯的是比隱

+0

我的問題是沒有明確定義CREATE TABLE調用中的十進制精度和小數位數。默認值是(18,0),它在功能上給出了一個int。 https://docs.microsoft.com/en-us/sql/t-sql/data-types/decimal-and-numeric-transact-sql –

1

你要麼創建表create table語句總是更好:

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

,或者如果你堅持選擇到申報數據類型:

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