Как вставить более 8 КБ в текстовый столбец SQL Server с помощью REPLICATE ()? - PullRequest
1 голос
/ 10 ноября 2009

Мне нужно написать тест, который требует хранения большого количества данных в текстовом столбце.

Когда я пытаюсь это сделать (вставьте 2 миллиарда X символов):

INSERT INTO table VALUES ( REPLICATE('X', 2000000000) )

Вот что я получаю:

SELECT *, DATALENGTH(textCol) FROM table

XXXXXXXXXXXXX .... 8000

Я надеялся на более чем 8000. Есть идеи, где я иду не так? Мой гугл-фу подводит меня.

Предостережение : Да, текстовые столбцы устарели. Я уверен, что есть много очень веских и веских причин, почему не стоит использовать их в качестве хранилищ данных. Предположим, я имею дело с устаревшей системой, в которой есть текстовые столбцы, в которых хранятся большие объемы больших объемов данных, и мне нужно написать тесты, чтобы выяснить, как мой бит стороннего кода может с этим справиться.

Ответы [ 2 ]

9 голосов
/ 10 ноября 2009

Функция REPLICATE возвращает данные того же типа, который был передан в . Поскольку вы передаете обычную строку в кавычках, это создает varchar (не путать с varchar(MAX)), максимальная емкость которого составляет 8000 символов.

Попробуйте это:

INSERT INTO table VALUES ( REPLICATE(convert(varchar(MAX), 'X'), 2000000000) )

Я не могу отпустить вас без обязательной рекомендации, чтобы вы использовали varchar(MAX) (или nvarchar(MAX)) столбцы вместо text, но это должно сработать. Я сейчас не за SSMS, но вам может придется convert(text, REPLICATE(convert(varchar(MAX), 'X'), 2000000000)), но я так не думаю. В любом случае, это должно сработать.

4 голосов
/ 10 ноября 2009

Просто приведите inline к типу данных clob (копия возвращается так же, как передано), например:

INSERT INTO table VALUES ( REPLICATE(cast('X' as varchar(max)), 2000000000) )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...