2009-05-05 9 views
0

メッセージ16927、レベル16、状態1、プロシージャGetWfGenProcessParameters、行21 text、ntext、およびimage変数にフェッチできません。"テキスト、ntext、およびイメージ変数にフェッチできません。 SQL Serverで?

本当にこのカーソルをテキストデータで操作する必要があります。 このエラーを乗り越える方法はありますか?

+0

あなたはvarchar型にキャストする必要があり、それは本当に長いです場合は、おそらくテキストを失うことになります。 – dotjoe

答えて

2

あなたがSQL Server 2005を使用している場合は、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

なぜ、カーソルを使用しているのですか?カーソルは、すべての費用をかけて回避する必要があります。おそらくあなたの問題はなくなるでしょう。しかし、あなたがカーソル内で何をしようとしているかについてのアイデアがなければ、アドバイスを提供することは難しいです。確かに、SQL Serverはテキストデータを変数に入れることができないという事実を変えることはできません。システムの制限を満たしているときは、自分が行っていることとそのやり方を再考する必要があります。

+0

私はいくつかのXMLフィールドで作業しており、NTEXTとして保存されています。そして、私はxmlをchunckingせずに* sp_xml_preparedocument *で動作するためにNTEXT変数が必要です。 –

+0

「すべてのコストをかけて」カーソルを避けるべきではありません。便利なときにカーソルを使用する必要があり、開発時間やデータの移行時間が大幅に短縮されることがあります。時には、ストアドプロシージャを一度実行して、カーソルを実行する最速の方法を何か実行する必要があります。すべてのコストを避けるべきだと言っているのは、コストが問題ではない場合にのみ当てはまりますが、私と私のために、時間が大幅に節約され、より効率的になります。それで、カーソルは避けようとするべきだと私は同意するだろうが... – bunggo

+0

@bunggo、開発時間を節約するカーソルは非常に貧しい習慣です。データベース時間は、dev時間よりもずっと貴重です。はい、カーソルを使用する時間がありますが、経験のあるdba以外ではほとんど使用しないでください。アプリケーション開発者はまったく怠け者であるか愚かであり、正しく動作する方法を学ぶことができません。ちなみに、セットベースのソリューションは一般に短く、開発に要する時間が短くて済みます。 – HLGEM