目前,我有一个函数来获取具有详细属性的 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
请提前。