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)

Était-ce utile?

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"

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top