Pergunta

Então, eu preciso atualizar um campo de texto. Nem a instrução UPDATE ou o trabalho declaração WRITETEXT quando usado abaixo

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

Como é que eu vou fazer isso quando as variáveis ??locais não podem ser do tipo de texto? (Se eu tivesse 2.005 sSQL servidor eu iria usar varchar (max) - mas eu não)

Foi útil?

Solução

Tente utilizar UPDATETEXT vez

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

A inserção offset é baseado em zero de modo 8000 deve escrever para o personagem 8001. A exclusão offset é nulo como um valor de NULL apaga todos os dados a partir da posição insert_offset ao final do texto existente.

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

Não se esqueça nvarchar (que você deve usar com o campo ntext) tem uma capacidade máxima de metade dos campos varchar que você está usando para que seus tamanhos de bloco precisa ser reduzida para 4000 nesse caso.

Outras dicas

os valores realmente irá variar de comprimento por isso vou tentar isso assim amanhã:

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

o acima funcionou, mas eu tinha que calcular o comprimento em primeiro lugar:

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

Não sei por que você não pode usar uma função como LEN () quando um parâmetro é esperado.

Eu tive um tempo difícil com este.

Eu estava tentando salvar longas cadeias (na verdade rico conteúdo da caixa de texto) a um feild ntext.

A solução acabou por ser bastante simples.

        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 foi de cerca de 3000 caracteres ou formatação de código e texto. "Num" é apenas um campo inteiro no banco de dados "Test", que também contêm o nome do campo ntext "Text"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top