为什么带有nvarchar(max)的变量工作不正确

时间:2013-03-08 09:38:04

标签: sql

目前,我有一个函数来获取具有detail属性的1个表的列的列表。当然,有一些表有很多列。因此,输出将超过10.000个字符。

我在这里测试:

declare @aa nvarchar(max) 
set @aa = dbo.fnGetColumnList('Table_Name')
print @aa

结果总是有大约4000个字符。看起来SQL已经截断了它。

我知道当我们声明nvarchar(max)时,SQL将支持最多2 ^ 32-1(2GB)的字符串。但为什么它只有大约4000个字符?

当我这样执行时:

select dbo.fnGetColumnList('Table_Name')

结果是正确的。

这是函数的代码:

-- get column list from table Mapping
ALTER FUNCTION [dbo].[fnGetColumnList] ( @tblName varchar (30))
RETURNS nvarchar(max)
AS
BEGIN

Declare @sql    nvarchar(max)

set @sql = ''
SELECT @sql = @sql + case 
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' ('+convert(varchar(10),[Length])+')  NULL' + CHAR(13)
when CHARINDEX('char', LOWER([DBType])) > 0 then ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
ELSE ', ['+[DBColumn]+']' + ' ['+[DBType]+']' + ' NULL' + CHAR(13)
end FROM dbo.Mapping WHERE [DBTable] = @tblName

return @sql
END

请提前。

2 个答案:

答案 0 :(得分:4)

这几乎总是一个变量赋值类型问题,如下所述:

For Nvarchar(Max) I am only getting 4000 characters in TSQL?

如果不是这样,那么可能只是Print的设置显示的字符太少了:

nvarchar(max) still being truncated

看了更新后的代码,看起来这是第二个问题,你的打印是截断的,因为它没有设置为显示足够的字符。

你应该通过运行

来看到这一点
SELECT LEN(@aa)

您将得到一个大于4000的数字,表示该值在变量中保持正确。

答案 1 :(得分:0)

SQL Management Studio中有一个选项: 工具>选项......>查询结果> SQL Server>结果到文本>每列中显示的最大字符数