Как обновить текстовое или ntext поле в SQL Server 2000

StackOverflow https://stackoverflow.com/questions/204170

  •  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 «Текст».

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top