2013-03-08 31 views
0

目前,我有一个函数,以获得具有detail属性的1个表的列的列表。当然,还有一些表格有很多列。所以,输出将超过10,000个字符。为什么变量与nvarchar(最大)工作不正确

在这里,我测试是这样的:

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 

请前进。

+1

你能发表该函数的代码吗? – steoleary 2013-03-08 09:40:50

+1

请发布'fnGetColumnList'内容 – 2013-03-08 09:41:03

+0

我添加了函数的代码问题。请查阅。谢谢。 – 2013-03-08 10:07:01

回答

0

在SQL Management Studio中的一个选项: 工具>选项...>查询结果> SQL服务器>结果为文本>中的每一列

4

显示的字符的最大数量这几乎总是一个变量赋值键入问题,如解释说:

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

如果它不是,那么它可能只是打印的设置,以显示过几个大字:

nvarchar(max) still being truncated

查看了更新后的代码,看起来好像是第二个问题,因为它没有设置显示足够的字符,所以您的打印被截断。

你应该通过运行

SELECT LEN(@aa) 

看到这一点,你会得到4000多家较大,显示在可变正确保存的值。

+0

我添加了功能的代码问题。请查阅。谢谢 – 2013-03-08 10:13:44

相关问题