在文本列

时间:2018-01-31 08:30:18

标签: sql-server sql-server-2016

我有一个包含列数据类型文本的表。我想使用SSMS(也可以使用其他工具)和insert语句在此列中插入数据。

Update dbo.xyz set data = 'query of length 31232 characters' where id = 1

如何插入它当我通过SSMS进行插入时,只插入前8000个字符。

2 个答案:

答案 0 :(得分:1)

我认为您的'query of length 31232 characters'存在问题,我举一个例子。

我创建了类似于你的xyz表,其id为数据类型为text的列Col。

然后我插入了2行并对其进行了2次更新,请注意,在一种情况下,我使用replicate('a', 32000)进行更新,而使用replicate(cast('a' as varchar(max)), 32000)进行更新,在第一种情况下,只插入了8000个字符,但是& #39;不是INSERT问题。

这里的问题是,如果您没有明确地强制转换为varchar(max),那么您的字符串会被截断为8000个字符。

create table dbo.xyz(id int, col text);

insert into dbo.xyz(id) values(1), (2);

Update dbo.xyz 
set col = replicate('a', 32000) 
where id = 1;

Update dbo.xyz 
set col = replicate(cast('a' as varchar(max)), 32000) 
where id = 2;

select id, len(cast(col as varchar(max)))
from dbo.xyz;

enter image description here

答案 1 :(得分:0)

您可以创建VARCHAR(MAX)或NVARCHAR(MAX)数据类型,使数据存储最多可达2 GB