2015-10-07 99 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)递减检查所创建的表

相关问题