2009-08-13 8 views
9

Je dois concaténer 2 colonnes ntext en une seule. Je ne peux pas les convertir en nchar, car les deux contiennent des chaînes de plus de 4000 caractères. Existe-t-il un moyen de le faire dans SQL Server 2005?Concaténer ntext dans SQL Server 2005

Répondre

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

Mais vraiment - avec SQL Server 2005, NTEXT devient obsolète et sera très probablement progressivement dans SQL Server 2008 R2 ou une version ultérieure. NVARCHAR(MAX) est le successeur logique, vous donnant tous NTEXT jamais vous a donné, et beaucoup plus!

Si vos champs seraient NVARCHAR(MAX) dès le début, vous pourriez simplement écrire:

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

et faire avec elle!

Je vous suggère de mettre à jour vos tables pour utiliser NVARCHAR(MAX) au lieu de NTEXT.

Marc

+0

Bonjour Marc. Je ne veux pas essayer de les convertir en raison du risque de rupture de l'application: MS Team Foundation Server. J'ai assez de misère sans 'le réparer'. Merci pour votre aide. A travaillé comme par magie;). – MariusCC

+0

OK, bon point - ne touchez jamais un système en cours d'exécution :-) –

+0

Salut @marc_s Je pense que vous pourriez avoir une petite faute de frappe dans votre premier exemple, "NEXT" plutôt que "NTEXT". (Bonne réponse cependant, +1 de ma part) –

3

Convertissez-les en nvarchar(max) pour la concaténation. C'est le remplacement SQL 2005 pour ntext et permet toutes les opérations habituelles nvarchar.

+0

Impossible de les convertir en raison du risque de rupture de l'application: MS TFS. J'essaie juste de pirater des champs. – MariusCC

1

Il y a une façon de mettre à jour la colonne 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 sont plus d'informations.