小编典典

SQL Server将字符串的长度减少到8000个字符

sql

我正在尝试在列数据类型为的表中插入数据NTEXT。理想情况下,它应该存储8000个以上的字符,但就我而言,它将其减少到8000个字符。

我正在过程中的运行时进行插入查询。下面是该程序正在执行的示例查询。

INSERT INTO TMPRESULTS SELECT ('A' + ',' + 'B' + ',' + 'C')

A,B,C等是示例数据,实际数据将在运行时被标识,实际内容跨越8000个字符。同样,用于存储值的变量也定义为’ NVARCHAR(MAX)

但是,当我尝试以下查询时,它的确在表中插入了超过8000个字符

INSERT INTO TMPRESULTS SELECT ('ABCdddd................')

我想在尝试用“ +”号连接数据时,sql server将长度减少到8000。我不能使用该CONCAT数据,因为数据将超过256列/参数。

任何想法,为什么这样做?另外,如果有人可以提供一些替代解决方案的帮助,那么我将不得不在运行时进行插入查询。


阅读 170

收藏
2021-04-07

共1个答案

小编典典

记录在+(字符串串联)(Transact-SQL)-备注中

如果字符串连接的结果超过了8,000个字节的限制,则结果将被截断。但是,如果串联的字符串中的至少一个是大值类型,则不会发生截断。

对于varchar8,000个字节,则为8,000个字符,对于nvarchar4000个字节。

查询INSERT INTO TMPRESULTS SELECT ('A' + ',' + 'B' + ',' + 'C')中的所有文字字符串都是非大值类型(实际上,它们都是varchar(1))。如果您CONVERT/CAST其中之一varchar(MAX)解决了此问题,请执行以下操作:

INSERT INTO TMPRESULTS
SELECT (CONVERT(varchar(MAX),'A') + ',' + 'B' + ',' + 'C');

如果需要nvarchar,请确保也将文字字符串声明为nvarchar

INSERT INTO TMPRESULTS
SELECT (CONVERT(nvarchar(MAX),N'A') + N',' + N'B' + N',' + N'C');
2021-04-07