2015-10-07 101 views
0

我有下面的查詢,其中我插入到臨時表中,當我嘗試運行查詢sql是拋出二進制或字符串數​​據將被截斷。但實際上,我的數據在列PhoneModel的定義nvarchar(400)的範圍內。爲什麼我得到的二進制或字符串數​​據將被截斷

CREATE TABLE #orders 
(
    quoteHeaderId INT, 
    PhoneModel nvarchar(400) 
) 

INSERT INTO #orders(quoteHeaderId, PhoneModel) 
SELECT qh.QuoteHeaderId, 
    (Select ph.ModelName + ',' 
    FROM t_handsetQuote h2 
     INNER JOIN t_PhoneAudit t1 on t1.PhoneAuditId = h2.QuotePhoneAuditId 
     INNER JOIN t_phoneModel ph on t1.phoneModelid = ph.phoneModelid             
    where qh.QuoteHeaderId = h2.QuoteHeaderId 
    FOR XML PATH('') 
    ) AS PhoneModel 
FROM t_QuoteHeader qh 
INNER JOIN t_handsetQuote h on qh.QuoteHeaderId = h.QuoteHeaderId 
INNER JOIN t_CustomerAdditionalInformation ch on qh.CustomerId = ch.CustomerId 
and keyName ='SendUpdatesByEmail' AND ch.value = 'yes' 
+1

[SQL服務器的可能的複製字符串或二進制數據將被截斷](http://stackoverflow.com/questions/6388756/sql-server-string-or-binary-data-would-be- truncated) –

回答

1

我認爲nvarchar(400)無法處理您插入到它的字符串的長度。

如何更改,恕不insert語句您PhoneModel nvarchar(400)PhoneModel varchar(MAX)

0

運行你的選擇查詢,並檢查ph.ModelName + ','len。它可以通過記錄來記錄不同。

運行您的查詢並提供反饋。看到發生了什麼導致了問題

0

最簡單的辦法是使用SELECT ... INTO:

SELECT qh.QuoteHeaderId, 
    (Select ph.ModelName + ',' 
    FROM t_handsetQuote h2 
     INNER JOIN t_PhoneAudit t1 on t1.PhoneAuditId = h2.QuotePhoneAuditId 
     INNER JOIN t_phoneModel ph on t1.phoneModelid = ph.phoneModelid             
    where qh.QuoteHeaderId = h2.QuoteHeaderId 
    FOR XML PATH('') 
    ) AS PhoneModel 
into #orders 
FROM t_QuoteHeader qh 
INNER JOIN t_handsetQuote h on qh.QuoteHeaderId = h.QuoteHeaderId 
INNER JOIN t_CustomerAdditionalInformation ch on qh.CustomerId = ch.CustomerId 
and keyName ='SendUpdatesByEmail' AND ch.value = 'yes' 

,然後通過訂購LEN(PhoneModel)遞減檢查所創建的表

相關問題