我正在尝试在列数据类型为的表中插入数据NTEXT。理想情况下,它应该存储8000个以上的字符,但就我而言,它将其减少到8000个字符。
NTEXT
我正在过程中的运行时进行插入查询。下面是该程序正在执行的示例查询。
INSERT INTO TMPRESULTS SELECT ('A' + ',' + 'B' + ',' + 'C')
A,B,C等是示例数据,实际数据将在运行时被标识,实际内容跨越8000个字符。同样,用于存储值的变量也定义为’ NVARCHAR(MAX)‘
NVARCHAR(MAX)
但是,当我尝试以下查询时,它的确在表中插入了超过8000个字符
INSERT INTO TMPRESULTS SELECT ('ABCdddd................')
我想在尝试用“ +”号连接数据时,sql server将长度减少到8000。我不能使用该CONCAT数据,因为数据将超过256列/参数。
CONCAT
任何想法,为什么这样做?另外,如果有人可以提供一些替代解决方案的帮助,那么我将不得不在运行时进行插入查询。
记录在+(字符串串联)(Transact-SQL)-备注中:
如果字符串连接的结果超过了8,000个字节的限制,则结果将被截断。但是,如果串联的字符串中的至少一个是大值类型,则不会发生截断。
对于varchar8,000个字节,则为8,000个字符,对于nvarchar4000个字节。
varchar
nvarchar
查询INSERT INTO TMPRESULTS SELECT ('A' + ',' + 'B' + ',' + 'C')中的所有文字字符串都是非大值类型(实际上,它们都是varchar(1))。如果您CONVERT/CAST其中之一varchar(MAX)解决了此问题,请执行以下操作:
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');