Comment mettre à jour un champ de texte ou ntext dans SQL Server 2000
-
03-07-2019 - |
Question
Je dois donc mettre à jour un champ de texte. L'instruction UPDATE ou WRITETEXT ne fonctionne pas si elle est utilisée ci-dessous
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
Comment suis-je censé faire cela lorsque les variables locales ne peuvent pas être de type TEXT? (Si j’avais SSQL Server 2005, j’utiliserais varchar (max) - mais ce n’est pas mon cas)
La solution
Essayez d'utiliser UPDATETEXT à la place
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval 8000 NULL @Data2
Le décalage d'insertion étant basé sur zéro, 8000 doit écrire dans le 8001ème caractère. Le décalage de suppression est nul, car une valeur de NULL supprime toutes les données de la position insert_offset jusqu'à la fin du texte existant.
Réf.: http://msdn.microsoft.com/en-us/ bibliothèque / ms189466.aspx
N'oubliez pas que nvarchar (que vous devez utiliser avec le champ ntext) a une capacité maximale de la moitié des champs varchar que vous utilisez. Par conséquent, la taille de vos blocs doit être réduite à 4000.
Autres conseils
les valeurs vont varier en longueur, je vais donc essayer comme ça demain:
WRITETEXT MyTable.MyField @ptrval @Data1
UPDATETEXT MyTable.MyField @ptrval Len(@Data1) NULL @Data2
Ce qui précède a fonctionné, mais je devais d'abord calculer la longueur:
WRITETEXT MyTable.MyField @ptrval @Data1
SET @Len = LEN(@Data1)
UPDATETEXT MyTable.MyField @ptrval @Len NULL @Data2
vous ne savez pas pourquoi vous ne pouvez pas utiliser une fonction telle que LEN () où un paramètre est attendu.
J'ai eu du mal avec celui-ci.
J'essayais de sauvegarder de longues chaînes (le contenu d'une zone de texte enrichi) dans un fichier ntext.
La solution s'est révélée assez simple.
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()
Remarque: strQuestionQUESTION comportait environ 3 000 caractères ou code de formatage et texte. " Num " est simplement un champ entier dans le champ "Test". base de données contenant également le nom du champ ntext "Texte"