Pregunta

Entonces necesito actualizar un campo de texto. Ni la instrucción UPDATE ni la instrucción WRITETEXT funcionan cuando se usan a continuación

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

¿Cómo se supone que debo hacer esto cuando las variables locales no pueden ser de tipo TEXT? (Si tuviera SSQL Server 2005 usaría varchar (max), pero no lo tengo)

¿Fue útil?

Solución

Intente usar UPDATETEXT en su lugar

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

El desplazamiento de inserción está basado en cero, por lo que 8000 debería escribir en el carácter 8001. El desplazamiento de eliminación es nulo ya que un valor de NULL elimina todos los datos de la posición insert_offset al final del texto existente.

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

No olvide que nvarchar (que debe usar con el campo ntext) tiene una capacidad máxima de la mitad de los campos varchar que está utilizando, por lo que sus tamaños de bloque deben reducirse a 4000 en ese caso.

Otros consejos

los valores realmente variarán en longitud, así que lo intentaré así mañana:

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

lo anterior funcionó pero primero tuve que calcular la longitud:

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

no estoy seguro de por qué no puede usar una función como LEN () donde se espera un parámetro.

Tuve un momento difícil con este.

Estaba tratando de guardar cadenas largas (contenido de cuadros de texto enriquecido) en un campo ntext.

La solución resultó ser bastante 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()

Nota: strQuestionQUESTION tenía aproximadamente 3000 caracteres o formato de código y texto. " Num " es solo un campo entero en la "Prueba" base de datos que también contiene el nombre de campo ntext " Text "

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top