2009-08-13 23 views
9

Necesito concatenar 2 columnas ntext en una. No puedo convertirlos a nchar, porque ambos contienen cadenas de más de 4000 caracteres. ¿Hay alguna manera de hacer esto en SQL Server 2005?Concatene ntext en SQL Server 2005

Respuesta

12
UPDATE 
    YourTable 
SET 
    Field = CAST((CAST(field1 AS NVARCHAR(MAX)) + CAST(field2 AS NVARCHAR(MAX))) AS NTEXT) 
WHERE 
    (your condition here) 

Pero en realidad - con SQL Server 2005, NTEXT se vuelve obsoleto y lo más probable es eliminar en SQL Server 2008 R2 o una versión posterior. NVARCHAR(MAX) es el sucesor lógico, dándote todos los NTEXT que jamás hayas dado, ¡y mucho más!

Si sus campos serían NVARCHAR(MAX) desde el principio, usted podría escribir:

UPDATE 
    YourTable 
SET 
    field = field1 + field2 
WHERE 
    (your condition here) 

y acabar de una vez!

Le sugiero que actualice sus tablas para usar NVARCHAR(MAX) en lugar de NTEXT.

Marc

+0

Hola Marc. No quiero intentar convertirlos por el riesgo de romper la aplicación: MS Team Foundation Server. Tengo miseria suficiente sin "arreglarla". Gracias por su solución. Funcionó como magia;). – MariusCC

+0

Bien, buen punto: nunca toque un sistema en ejecución :-) –

+0

Hola @marc_s Creo que es posible que tenga un pequeño error tipográfico en su primer ejemplo, "NEXT" en lugar de "NTEXT". (Buena respuesta, +1 de mí) –

3

Convertirlos a nvarchar(max) para la concatenación. Es el reemplazo de SQL 2005 para ntext y permite todas las operaciones habituales de nvarchar.

+0

No se pueden convertir debido al riesgo de romper la aplicación: MS TFS. Solo estoy tratando de hackear algunos campos. – MariusCC

1

Hay una manera de actualizar la columna ntext:

DECLARE @memo binary(16) 

SELECT 
    @memo = TEXTPTR(field1) 
FROM 
    YourTable 
WHERE 
    (your condition here) 

UPDATETEXT YourTable.field1 @memo NULL 0 'Text to append' 

Here son más información.

Cuestiones relacionadas