Frage

Also brauche ich ein Textfeld zu aktualisieren. Weder die UPDATE-Anweisung oder die Anweisung WRITE Arbeit, wenn sie unter

verwendet
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

Wie soll ich dies tun, wenn lokale Variablen nicht vom Typ TEXT sein können? (Wenn ich sSQL Server 2005 hätte, würde ich verwenden varchar (max) - aber ich weiß nicht)

War es hilfreich?

Lösung

Versuchen Sie Update anstelle

WRITETEXT MyTable.MyField @ptrval @Data1 
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2

Der Offset-Einsatz ist Null basiert, so dass 8000 sollte in das 8001. Zeichen schreiben. Die löscht Offset null als ein Wert von NULL alle Daten aus der insert_offset Position löscht bis zum Ende des bestehenden Textes.

Ref: http://msdn.microsoft.com/en-us/ Bibliothek / ms189466.aspx

Vergessen Sie nicht, nvarchar (die Sie mit ntext Feld verwenden sollte) haben eine maximale Kapazität der Halb varchar Felder, die Sie so verwenden Ihre Blockgrößen reduziert in diesem Fall bis 4000 werden müssen.

Andere Tipps

die Werte variieren tatsächlich in der Länge, damit ich es wie folgt morgen versuchen werden:

WRITETEXT MyTable.MyField @ptrval @Data1 
UPDATETEXT MyTable.MyField @ptrval Len(@Data1) NULL @Data2

die oben gearbeitet, aber ich hatte die Länge berechnen zuerst:

WRITETEXT MyTable.MyField @ptrval @Data1
SET @Len = LEN(@Data1)
UPDATETEXT MyTable.MyField @ptrval @Len NULL @Data2

nicht sicher, warum Sie nicht eine Funktion wie LEN (), in dem ein Parameter erwartet wird, verwenden können.

Ich hatte eine harte Zeit mit diesem.

ich lange Strings zu retten versuche, (eigentlich Rich-Text-Box Inhalt) zu einem ntext- Feild.

Die Lösung ziemlich einfach entpuppte.

        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()

Hinweis: strQuestionQUESTION betrug etwa 3000 Zeichen oder Formatierung Code und Text. „Num“ ist nur ein Integer-Feld in der „Test“ Datenbank, die auch die ntext- Feldnamen „Text“ enthalten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top