2009-05-05 12 views
0

Je reçois ce message d'erreur: Msg 16927, niveau 16, état 1, procédure GetWfGenProcessParameters, ligne 21 Impossible d'extraire les variables text, ntext et image.Comment faire pour passer "Impossible d'extraire les variables text, ntext et image." sur SQL Server?

J'ai vraiment besoin de faire fonctionner ce curseur avec des données de texte. Y at-il un moyen de surmonter cette erreur?

+0

vous devez jeter un varchar et peut-être perdre du texte si elle est vraiment longue. – dotjoe

Répondre

2

Si vous utilisez SQL Server 2005, vous pouvez utiliser NVARCHAR(MAX):

CREATE TABLE text_test (test NTEXT NOT NULL) 

INSERT 
INTO text_test 
VALUES ('test') 

DECLARE @t NVARCHAR(MAX); 

DECLARE txt_cur CURSOR FOR 
     SELECT test 
     FROM text_test 

OPEN txt_cur 

FETCH NEXT 
FROM txt_cur 
INTO @t 

CLOSE txt_cur 

DEALLOCATE txt_cur 
GO 

DROP TABLE text_test 
GO 
1

Premièrement, pourquoi utilisez-vous un cusrsor, les curseurs doivent être évités à tout prix. Si vous utilisez une solution basée sur un ensemble, votre problème disparaîtra peut-être. Cependant, sans plus d'idée de ce que vous essayez de faire, il est difficile de donner des conseils. Certes, je ne peux pas changer le fait que SQL Server ne vous permet pas de mettre des données de texte dans une variable. Lorsque vous rencontrez une limitation du système, vous devez repenser ce que vous faites et comment vous le faites.

+0

Je travaille avec des champs XML, stockés sous NTEXT. Et j'ai besoin d'une variable NTEXT pour travailler avec * sp_xml_preparedocument * sans découper le xml. –

+0

Les curseurs ne doivent pas être évités "à tout prix". Il y a des moments où vous avez besoin d'utiliser un curseur quand ils sont utiles et économise du temps de développement ou de migration de données. Parfois, j'ai besoin d'exécuter une procédure stockée une fois pour faire quelque chose où un curseur est le moyen le plus rapide de le faire. Dire qu'ils devraient être évités à tout prix n'est vrai que si le coût n'est pas un problème, mais pour moi et ce que je fais, cela me fait gagner beaucoup de temps et me rend plus efficace. Cela dit, je serais d'accord que les curseurs devraient essayer d'être évités ... mais pas à tout prix. – bunggo

+0

@bunggo, curseurs pour gagner du temps de développement est une très mauvaise pratique. Le temps de base de données est beaucoup plus précieux que le temps de dev. Oui, il y a des temps pour utiliser des curseurs, mais ils ne devraient pratiquement jamais être utilisés sauf par un dba expérimenté et JAMAIS par un développeur d'application parce qu'il est trop paresseux ou stupide pour apprendre à faire les choses correctement. Incidemment, les solutions basées sur un ensemble sont généralement plus courtes et prennent moins de temps à se développer. – HLGEM