Реферат: Работа с объектами большого объема в MS SQL и ADO
Следующие два вызова аналогичны:
WRITETEXT table.column text_ptr inserted_data UPDATETEXT table.column text_ptr 0 NULL inserted_data |
Давайте рассмотрим пример. Предположим, я ошибся, набирая имя своей жены, и мне его сейчас необходимо заменить:
declare @p binary(16) declare @l int,@idx int begin tran select @p = textptr(txt), @idx = patindex('%Rosa%',txt)-1, @l = datalength(txt)-(patindex('%Rosa%',txt)-1) from blob_test (updlock) where id = 1 if textvalid(' blob_test.txt',@p) = 1 updatetext blob_test.txt @p @idx 4 '[Correct name]' commit |
Пожалуй, это все. Осталось еще одна тонкость.
Данные в строке
Читая Books Online, я наткнулся на такое предложение:
After you have turned on the text in row option, you cannot use the READTEXT, UPDATETEXT or WRITETEXT statements, to read or modify parts of any text, ntext, or image value stored in the table.
Вот это да! Т.е. я не могу пользоваться функциями, приведенными выше, если таблица находится в режиме «данные в строке»? Это неправда. Хотя вот такой пример может убедить кого угодно:
declare @p binary(16) declare @idx int,@l int select @p = textptr(ntxt), @idx = patindex('%is%',ntxt)-1, @l = datalength(ntxt)/2-(patindex('%is%',ntxt)-1) from blob_test (repeatableread) where id = 1 if textvalid('blob_test.ntxt',@p) = 1 readtext blob_test.ntxt @p 0 14 |