我对此进行了研究,发现textSQL Server中的一列可以存储超过8000个字符。但是,当我在文本列中运行以下插入时,它仅插入8000个字符:
text
UPDATE a SET [File] = b.Header + CHAR(13) + CHAR(10) + d.Detail + c.Trailer + CHAR(13) + CHAR(10) + CHAR(26) FROM Summary a JOIN #Header b ON b.SummaryId = a.SummaryId JOIN #Trailer c ON c.SummaryId = a.SummaryId JOIN #Detail d ON d.SummaryId = a.SummaryId WHERE a.SummaryId = @SummaryId
我正在尝试生成固定宽度的平面文件,并且每一行的长度应为3900个字符,并且它们分别在临时表中。但是,当我在永久表中进行插入时,Trailer数据将被截断。
我正在添加char(10)+ char(13)来添加回车符和换行符,并在文件末尾添加char(26),似乎他们正在将字符添加到固定宽度布局中。
代码的问题不是存储值的字段的数据类型,而是存储在一起的值的类型。
的类型b.Header不是,text而是varchar用作整个表达式的类型。当字符串连接在一起时,结果将被截断以适合一个varchar值。
b.Header
varchar
如果将第一个字符串转换为text,则整个表达式将获得该类型,并且长度可能超过8000个字符:
SET [File] = cast(b.Header as text) + CHAR(13) + CHAR(10) + d.Detail + c.Trailer + CHAR(13) + CHAR(10) + CHAR(26)
自然,您应该过渡到使用新类型varchar(max)而不是text,但这不是造成问题的原因。
varchar(max)