目前,我有一个函数,以获得具有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
请前进。
你能发表该函数的代码吗? – steoleary 2013-03-08 09:40:50
请发布'fnGetColumnList'内容 – 2013-03-08 09:41:03
我添加了函数的代码问题。请查阅。谢谢。 – 2013-03-08 10:07:01