Wie man einen Text oder ntext Feld in SQL Server 2000 aktualisieren
-
03-07-2019 - |
Frage
Also brauche ich ein Textfeld zu aktualisieren. Weder die UPDATE-Anweisung oder die Anweisung WRITE Arbeit, wenn sie unter
verwendetCREATE 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)
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