Как обновить текстовое или текстовое поле в SQL Server 2000 - PullRequest
2 голосов
/ 15 октября 2008

Так что мне нужно обновить текстовое поле. Ни оператор 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) - но я не использую)

Ответы [ 3 ]

5 голосов
/ 15 октября 2008

Попробуйте использовать 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.

2 голосов
/ 15 октября 2008

значения на самом деле будут различаться по длине, поэтому я попробую это так завтра:

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 (), где ожидается параметр.

0 голосов
/ 19 сентября 2014

Мне было трудно с этим.

Я пытался сохранить длинные строки (на самом деле содержимое текстового поля) в поле 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»

...