Domanda

Quindi devo aggiornare un campo di testo. Né l'istruzione UPDATE né l'istruzione WRITETEXT funzionano se utilizzate di seguito

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

Come dovrei farlo quando le variabili locali non possono essere di tipo TEXT? (Se avessi SSQL Server 2005 userei varchar (max) - ma non lo faccio)

È stato utile?

Soluzione

Prova invece a utilizzare UPDATETEXT

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

L'offset di inserimento è basato su zero, quindi 8000 dovrebbe scrivere nel 8001 ° carattere. L'offset di eliminazione è nullo poiché il valore NULL elimina tutti i dati dalla posizione insert_offset alla fine del testo esistente.

Rif: http://msdn.microsoft.com/en-us/ biblioteca / ms189466.aspx

Non dimenticare che nvarchar (che dovresti usare con il campo ntext) ha una capacità massima della metà dei campi varchar che stai usando, quindi le dimensioni dei blocchi devono essere ridotte a 4000 in quel caso.

Altri suggerimenti

i valori in realtà varieranno in lunghezza, quindi lo proverò in questo modo domani:

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

quanto sopra ha funzionato ma ho dovuto prima calcolare la lunghezza:

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

non so perché non è possibile utilizzare una funzione come LEN () in cui è previsto un parametro.

Ho avuto difficoltà con questo.

Stavo cercando di salvare stringhe lunghe (in realtà contenuti di caselle di testo ricchi) in un campo ntext.

La soluzione si è rivelata abbastanza semplice.

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

Nota: strQuestionQUESTION era di circa 3000 caratteri o formattazione di codice e testo. & Quot; Num " è solo un campo intero in " Test " database che contiene anche il nome del campo ntext " Testo "

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top