Как обновить текстовое или ntext поле в SQL Server 2000
-
03-07-2019 - |
Вопрос
Поэтому мне нужно обновить текстовое поле.Ни оператор UPDATE, ни оператор WRITETEXT не работают при использовании ниже.
CREATE TABLE MyTable (IDField int, MyField text)
INSERT INTO MyTable (IDField) SELECT 1
DECLARE @Data1 varchar(8000), @Data2 varchar(8000), @ptrval binary(16)
SELECT @Data1 = REPLICATE('1',8000)
SELECT @Data2 = REPLICATE('2',8000)
-- this sets MyField to string of only 8000 characters
UPDATE MyTable SET MyField = @Data1 + @Data2 WHERE IDField = 1
SELECT @ptrval = TEXTPTR(MyField )
FROM MyTable
WHERE IDField = 1
-- this causes an error: Incorrect syntax near '+'.
--WRITETEXT MyTable.MyField @ptrval @Data1 + @Data2
Как мне это сделать, если локальные переменные не могут иметь тип TEXT?(Если бы у меня был SSQL Server 2005, я бы использовал varchar(max) – но я этого не делаю)
Решение
Попробуйте вместо этого использовать UPDATETEXT.
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2
Смещение вставки отсчитывается от нуля, поэтому 8000 следует записать в 8001-й символ.Смещение удаления равно нулю, поскольку значение NULL удаляет все данные от позиции Insert_offset до конца существующего текста.
Ссылка: http://msdn.microsoft.com/en-us/library/ms189466.aspx
Не забывайте, что nvarchar (который вы должны использовать с полем ntext) имеет максимальную емкость, равную половине используемых вами полей varchar, поэтому в этом случае размеры блоков необходимо уменьшить до 4000.
Другие советы
значения на самом деле будут различаться по длине, поэтому завтра я попробую вот так:
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval Len(@Data1) NULL @Data2
вышеописанное сработало, но сначала мне пришлось вычислить длину:
WRITETEXT MyTable.MyField @ptrval @Data1
SET @Len = LEN(@Data1)
UPDATETEXT MyTable.MyField @ptrval @Len NULL @Data2
не знаю, почему вы не можете использовать такую функцию, как LEN(), где ожидается параметр.
Мне было тяжело с этим.
Я пытался сохранить длинные строки (на самом деле содержимое расширенного текстового поля) в поле ntext.
Решение оказалось довольно простым.
SQLst = "UPDATE Test SET Text = cast (@value as ntext)" & _
" WHERE Num = 3 "
Debug.Print(SQLst.ToString)
Dim cnn As New SqlServerCe.SqlCeConnection(Tcon)
Dim cmd = New SqlCeCommand(SQLst, cnn)
cmd.Parameters.AddWithValue("@value", strQuestionQUESTION)
cnn.Open()
cmd.ExecuteNonQuery()
cnn.Close()
Примечание:strQuestionQUESTION содержал около 3000 символов кода форматирования и текста.«Num» — это просто целочисленное поле в базе данных «Test», которое также содержит имя поля ntext «Текст».