[SQL]VARCHAR(MAX)字串相加的問題

[SQL]VARCHAR(MAX)字串相加的問題

早上同事問一個問題,為何變數設定為VARCHAR(MAX)了,字串相加時,為何會被截掉呢?

如下的SQL,最後的'A'就不會出現


SELECT 'found' WHERE SPACE(8000) + 'A' LIKE '%A'

image

 

預設在字串相加時,並不會用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'

image

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^