如何使用REPLICATE()在SQL Server文本列中插入超过8k?

Dar*_*man 1 t-sql sql-server

我必须编写一个测试,需要将大量数据存储在文本列中.

当我尝试这个(插入20亿个X字符)时:

INSERT INTO table VALUES ( REPLICATE('X', 2000000000) )
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

SELECT *, DATALENGTH(textCol) FROM table
Run Code Online (Sandbox Code Playgroud)

XXXXXXXXXXXXX .... 8000

我希望超过8000.任何想法,我出错了?我的google-fu让我失望了.

警告:是的,不推荐使用文本列.我确信有很多非常有效和明智的理由为什么想要将它们用作批量数据存储是个坏主意.假设我正在处理遗留系统,该系统碰巧有文本列存储大量批量数据,我必须编写测试来弄清楚我的第三方代码如何处理它.

Ada*_*son 9

REPLICATE函数返回与传入的数据类型相同的数据.因为你传入了一个普通的带引号的字符串,所以它创建了一个varchar(不要与a混淆varchar(MAX)),它的最大容量为8000个字符.

试试这个:

INSERT INTO table VALUES ( REPLICATE(convert(varchar(MAX), 'X'), 2000000000) )
Run Code Online (Sandbox Code Playgroud)

如果没有使用varchar(MAX)(或nvarchar(MAX))列代替的强制性建议,我不能让你离开text,但这应该可以解决问题.我现在不在SSMS面前,但你可能不得不convert(text, REPLICATE(convert(varchar(MAX), 'X'), 2000000000))这样做,但我不这么认为.不管怎样,这应该可以解决问题.