【发布时间】:2013-02-23 19:28:12
【问题描述】:
目前,我有一个函数可以获取 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
请前进。
【问题讨论】:
-
能贴出函数的代码吗?
-
请发
fnGetColumnList内容 -
我在问题中添加了函数代码。请查阅。谢谢。
标签: sql