目前,我有一个函数来获取具有detail属性的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
请提前。
答案 0 :(得分:4)
这几乎总是一个变量赋值类型问题,如下所述:
For Nvarchar(Max) I am only getting 4000 characters in TSQL?
如果不是这样,那么可能只是Print的设置显示的字符太少了:
nvarchar(max) still being truncated
看了更新后的代码,看起来这是第二个问题,你的打印是截断的,因为它没有设置为显示足够的字符。
你应该通过运行
来看到这一点SELECT LEN(@aa)
您将得到一个大于4000的数字,表示该值在变量中保持正确。
答案 1 :(得分:0)
SQL Management Studio中有一个选项: 工具>选项......>查询结果> SQL Server>结果到文本>每列中显示的最大字符数