Como atualizar um texto ou campo ntext no SQL Server 2000
-
03-07-2019 - |
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)
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"