Поэтому мне нужно обновить текстовое поле. Ни оператор 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
Как мне это сделать, если локальные переменные не могут быть типа ТЕКСТ? (Если бы у меня был 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-поля «Text».