2015-01-16 5 views
13

Perché ottengo questo errore dalla mia query?Errore UPDATE: "Il testo del tipo di dati dell'argomento non è valido per l'argomento 1 di REPLACE"

Msg 8116, Level 16, State 1, Line 3
Argument data type text is invalid for argument 1 of replace function.

Query:

UPDATE 
    tableName 
SET 
    fieldName = REPLACE (fieldName, '&lt;', '<') 
WHERE 
    id = 100 
+6

I tipi di dati 'ntext',' text' e 'image' verranno rimossi in una versione futura di SQL Server. Evitare l'uso di questi tipi di dati in un nuovo lavoro di sviluppo e pianificare di modificare le applicazioni che attualmente li utilizzano. Usa invece 'nvarchar (max)', 'varchar (max)' e 'varbinary (max)'. [Vedere i dettagli qui] (http://msdn.microsoft.com/en-us/library/ms187993.aspx). 'TEXT' è un tipo di dati veramente orribilmente brutto - ci sono così tante cose che ** non puoi ** fare ad esso (non puoi usare tutte le funzioni di stringa, per esempio) - smetti di usarlo - ORA! –

risposta

22

Prova questo:

UPDATE tableName 
SET fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<') 
WHERE id = 100 
+0

Entrambe le risposte risolvono il problema ma non ne menzionano il motivo (guarda il commento di Marc). Inoltre, il messaggio di errore stesso indica il motivo. –

+0

Wow! Grazie. Funziona! – MufasaTheGreatAndPowerfull2

1

questo sarà il lavoro per voi

UPDATE yourTableName 
SET 
fieldName = REPLACE (CONVERT(VARCHAR(MAX), fieldName), '&lt;', '<') 
WHERE id = 100 
0

Se si vuole fare la stessa operazione per il testo più grande di 8000 caratteri è possibile utilizzare il codice sottostante:

DECLARE @v VARCHAR(10) -- TEXT TO ADD 
DECLARE @Vs VARHCAR(10) -- TEXT TO FIND 
SET @v = 'String text to add' 
SET @Vs = 'String text to find' 


     UPDATE 
       yourTableName 
     SET 
       textField = SUBSTRING(textField,1,DATALENGTH (textField)-LEN(@Vs)) + REPLACE(CAST(SUBSTRING(textField,DATALENGTH(textField)-LEN(@Vs)-1,DATALENGTH (textField)) AS VARCHAR(4)),@Vs,@v) 
      WHERE 
       yourTableName.id = @iRifID -- Update for Table ID 
Problemi correlati