2014-07-02 31 views
1

我有一個#temptable,我試圖填充它,但它不工作。當插入到可能的時候出現錯誤

DECLARE 
     @nBranchId int 
     ,@tmStartDate datetime 
     ,@tmEndDate datetime 


SELECT @nBranchId = 3483 
     ,@tmStartDate = DATEADD(DAY, -10, GETDATE()) 
     ,@tmEndDate = GETDATE() 


CREATE table #temptable (
    nResultsId int 
    ,nInstrId int 
    ,nBranchId int 
    ,nFoldersId int 
    ,strPaperId varchar(50) 
    ,strPosName varchar(50) 
    ,fQuantity float 
    ,fRevaluationPrice float 
    ,fHistRevaluationPrice float 
    ,tmDate datetime 
    ,nPrevResultsId int 
) 

INSERT INTO #temptable 
SELECT 
     xpr.nResultsId 
     ,xpr.nInstrId 
     ,xpr.nBranchId 
     ,xpr.nFoldersId 
     ,xpr.strPaperId 
     ,xpr.strPosName 
     ,xpr.fQuantity 
     ,xpr.fRevaluationPrice 
     ,xpr.fHistRevaluationPrice 
     ,xpr.tmDate 
     ,nPrevResultsId = dbo.fnGetPrevTradeResultId(xpr.nBranchId, xpr.nInstrId, xpr.strPaperId, xpr.strPosName,xpr.tmDate, xpr.nFoldersId) 
FROM dbo.XP_Results AS xpr WITH(READUNCOMMITTED) 
WHERE 1 = 1 
     AND xpr.nBranchId = ISNULL(@nBranchId, xpr.nBranchId) 
     AND xpr.tmDate BETWEEN @tmStartDate AND @tmEndDate 
     AND xpr.nInstrId <> 18 


DROP table #temptable 

收到此錯誤:

消息8152,級別16,狀態14,第28行 字符串或二進制數據將被截斷。 該聲明已被終止。

我在哪裏錯過了?看了看卻不能解決它

+0

你可以發佈'dbo.XP_Results'的定義嗎? – StevieG

+0

聽起來像你會想看看XP_Results varchar列的長度 – Kritner

回答

2

你有不同長度的數據類型

爲了避免這個問題,使用SELECT INTO聲明

#Temptable將與正確的數據類型自動創建(額外優惠,你不必腳本CREATE語句)

DECLARE 
     @nBranchId int 
     ,@tmStartDate datetime 
     ,@tmEndDate datetime 


SELECT @nBranchId = 3483 
     ,@tmStartDate = DATEADD(DAY, -10, GETDATE()) 
     ,@tmEndDate = GETDATE() 

SELECT xpr.nResultsId 
     ,xpr.nInstrId 
     ,xpr.nBranchId 
     ,xpr.nFoldersId 
     ,xpr.strPaperId 
     ,xpr.strPosName 
     ,xpr.fQuantity 
     ,xpr.fRevaluationPrice 
     ,xpr.fHistRevaluationPrice 
     ,xpr.tmDate 
     ,nPrevResultsId = dbo.fnGetPrevTradeResultId(xpr.nBranchId, xpr.nInstrId, xpr.strPaperId, xpr.strPosName,xpr.tmDate, xpr.nFoldersId) 
INTO #temptable 
FROM dbo.XP_Results AS xpr WITH(READUNCOMMITTED) 
WHERE 1 = 1 
     AND xpr.nBranchId = ISNULL(@nBranchId, xpr.nBranchId) 
     AND xpr.tmDate BETWEEN @tmStartDate AND @tmEndDate 
     AND xpr.nInstrId <> 18 


DROP table #temptable 
+0

雖然給了我語法錯誤 – MrProgram

+1

@krillezzz更正! – Horaciux

1

應該把這兩列修改成這樣。可能發生的是,您試圖將大於50個字符的變量插入到varchar(50)列中。

strPaperId varchar(max), 
strPosName varchar(max) 
+0

謝謝。沒有看到即將到來 – MrProgram

1

這意味着其中一列的數據大於您爲臨時表列聲明的數據類型大小。例如,如果您有一個臨時表列varchar(2),然後嘗試插入值「123」,則會得到該錯誤消息,因爲我們插入的值比您要插入的列的大小更長成。請注意,此消息可以表示任何類型。

找到有問題的臨時表列,並將大小增加到實際表中的大小。

相關問題