字符串即使nvarchar(max)也被截断

时间:2015-03-16 10:17:11

标签: sql-server sql-server-2014

我有以下内容:

IF OBJECT_ID('tempdb..#Columns', N'U') IS NOT NULL DROP TABLE #Columns
CREATE TABLE #Columns (column_name nvarchar(max))

DECLARE @TableName nvarchar(100)
SET @TableName = 'mytable'

INSERT INTO #Columns 
SELECT 'd.' + column_name + ' as ''' +  column_name + '/old'', i.' + column_name + ' as ''' + column_name + '/new'''
FROM INFORMATION_SCHEMA.COLUMNS
WHERE 
    table_name = @TableName AND
    data_type <> 'text' AND
    data_type <> 'varbinary' AND
    data_type <> 'image'
ORDER BY 
    ordinal_position

DECLARE @string nvarchar(max)

SELECT @string = COALESCE(@string + ', ', '') + column_name
FROM #columns

PRINT len(@string)
PRINT @string

我有一张超过100列的表格。以上将截断我的@string,其长度约为10500。

为什么即使我使用nvarchar(max)字符串也会被截断?避免这种截断的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

PRINT len(@string)是否显示正确的长度?如果是这样,PRINT @string就是问题所在。打印件最多只能输出4000个字符。

尝试

SELECT @string

以将结果输出为未截断的行。