字符串或二进制数据会被截断,但一切都是varchar(max)?

时间:2017-10-23 17:53:25

标签: sql sql-server tsql

我有一个查询,使用类似于此的查询将一些表格数据转换为JSON-esque字符串数组:

SELECT cr.TableId AS Id,
       cast(quotename(
                       stuff(
                            (SELECT cast(',' AS VARCHAR(max)) + quotename(cast(li.ImageUrl AS VARCHAR(max)), '"')
                             FROM   [DSP].[CreativeLibraryImage] cli WITH (nolock)
                                    INNER JOIN [DSP].[LibraryImage] li WITH (nolock)
                                      ON li.LibraryImageId = cli.[CreativeLibraryImageId]
                             WHERE  cli.TableId = cr.TableId
                             FOR xml path('')
                             ), 1, 1, ''
                             ) --stuff
                      ) --quotename
                      AS VARCHAR(max)
            ) --cast
            AS ImagePaths
FROM   MyTable cr WITH (nolock); 

我得到"字符串或二进制数据将被截断"在我的查询中途出现错误,但我认为我已将所有varchar数据转换为varchar(max)数据,因此我不应该有任何字符串长度问题。显然,这个表格数据已经成为一个广泛的专栏,但是我无法看到它可能会被截断的位置。

有人可以告诉我可能导致这种情况的原因,以便我可以相应地进行补偿吗?

1 个答案:

答案 0 :(得分:1)

直接来自quotename的{​​{1}}:

  

' character_string'是一串Unicode字符数据。   character_string是sysname,限制为128个字符。输入   大于128个字符返回NULL。