【问题标题】:Why variable with nvarchar(max) work incorrect为什么带有 nvarchar(max) 的变量工作不正确
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    For Nvarchar(Max) I am only getting 4000 characters in TSQL?

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

    nvarchar(max) still being truncated

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

    你应该通过运行看到这个

    SELECT LEN(@aa)
    

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

    【讨论】:

      猜你喜欢
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多