[SQL]VARCHAR(MAX)字串相加的問題
早上同事問一個問題,為何變數設定為VARCHAR(MAX)了,字串相加時,為何會被截掉呢?
如下的SQL,最後的'A'就不會出現
SELECT 'found' WHERE SPACE(8000) + 'A' LIKE '%A'
預設在字串相加時,並不會用MAX去相加,所以超過8,000就被截掉了。
所以下次在這裡字串相加時,如果需要用MAX時,請記得要CAST成VARCHAR(MAX)再相加哦! 如下,
DECLARE @a VARCHAR(MAX) ,
@b VARCHAR(MAX) ,
@c VARCHAR(MAX) ,
@d VARCHAR(MAX) ,
@e VARCHAR(MAX)
SELECT @a = CAST('A' AS VARCHAR(MAX)) + SPACE(8000) + 'A' ,
@b = SPACE(8000) + 'A' ,
@c = 'A' + SPACE(8000) + 'A' ,
@d = 'A' + CAST('B' AS VARCHAR(MAX)) + SPACE(8000) + 'A' ,
@e = SPACE(8000) + CAST('A' AS VARCHAR(MAX))
SELECT DATALENGTH(@a) AS aDataLen ,
DATALENGTH(@b) AS bDataLen ,
DATALENGTH(@c) AS cDataLen ,
DATALENGTH(@d) AS dDataLen ,
DATALENGTH(@e) AS eDataLen
SELECT '@a' WHERE @a LIKE '%A'
SELECT '@b' WHERE @b LIKE '%A'
SELECT '@c' WHERE @c LIKE '%A'
SELECT '@d' WHERE @d LIKE '%A'
SELECT '@e' WHERE @d LIKE '%A'
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^