0

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

请提前。

4

2 回答 2

4

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

对于 Nvarchar(Max),我在 TSQL 中只得到 4000 个字符?

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

nvarchar(max) 仍然被截断

查看更新的代码后,似乎是第二个问题,您的打印被截断,因为它没有设置为显示足够的字符。

您应该通过运行看到这一点

SELECT LEN(@aa)

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

于 2013-03-08T09:53:33.690 回答
0

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

于 2013-03-08T09:50:52.300 回答