2009-08-17 13 views
0

ストアドプロシージャ - フィールドの型とntext型TSQL - ntext型のケース(SQL 2005)SQL 2005で

イムのMicrosoft CRMにインポートする前に、いくつかのデータを整理するためにストアドプロシージャを書きます。 これまでのところすべて正常に動作します。

しかし、私はnTextフィールドでcase文を実行する必要があります。このフィールドを約3または4のテキスト値と照合して、nTextフィールドである新しいフィールド(宛先テーブルにすでにある)を設定する必要があります。

私はエラーに等しい演算子に互換性がないntext型とvarchar 「データ型を取得していますが。

その解決策のすべては非常に複雑なように思えますが、私はいくつかの記事に遭遇している。

感謝

+0

私はあなたを聞いても、あなたはこれらのNTEXTフィールドで実行するチェックの種類を持っているのですか? 大文字小文字のデータが含まれている可能性があるので、NTextフィールドが効率的であるかどうかわかりません。たぶんあなたがしたいことに応じて、より効率的なアプローチがあります。 – Diego

+0

私は今混乱がどこに来るのか分かります。 最初にMS CRMでエンティティを作成しました。その後、プログラムを使用してSQLのテーブルのコピーを作成しました(これで後で同期できます)。ただし、すべてのテキストフィールドはnTextとして作成されました。 データは、その自己が3-5のchrsであり、新しいテキストは2-5のchrsです。 – Audioillity

+0

うわー、あまりにも多くのことを話して... nTextフィールドを妥当なサイズのvarcharに変換すれば、問題はありません。 – Diego

答えて

5

可能であれば、NTEXT型はNVARCHAR(MAX)で置き換えることをお勧めします。これは、NTEXTがファーストクラス型ではなく、NVARCHAR型であるためです。これは、ALTER TABLEステートメントで行うのが簡単です。

ほとんどの上位レベルのコードは、型の変更に関心がありません。 READTEXT、WRITETEXなどを使用してNTEXT列を処理する手続き型コードは、基本的な選択と更新だけに簡素化できます。

型の変更ができない場合は、比較と代入をCAST()またはCONVERT()演算子でラップする必要があります。これは醜いです。

+0

2つのデータベースフィールドをntextからvarcharに変更しました。これは私のSPの問題を解決しました。この幸いにも後に同期。 CRMに正しく戻ってきました。 – Audioillity

+0

優秀、喜んで助けてください。 – devstuff

3

NTEXTは、SQL Server 2005では廃止予定です。代わりにNVARCHAR(MAX)を使用する必要があります(NVARCHAR(MAX)をCASEで使用できます)。タイプを変更することは可能ですか?

+0

さて、私はそれを見ました。私はそれを試してみる必要があります、私たちは同期する製品があります。私は解決策を見つける必要がある場合はそれがうまくいくはずですが、それを対処することができる限り、CRMを持つSQLテーブル。 – Audioillity

+0

以下のサンプルをチェックしてください。それはうまく動作します。 NVARCHAR(MAX)にキャストされ、CASEで使用されるNTEXTを使用します。幸運:-) – gsharp

1

この作品だけでなく

CREATE TABLE #TEMP 
(
    MyDummy NTEXT 
) 

INSERT INTO #TEMP (MyDummy) Values ('test') 

SELECT 
CASE CAST(MyDummy AS NVARCHAR(MAX)) WHEN 'test' THEN 'ok' ELSE 'NOK' END MyTest 
FROM #temp 

drop table #temp