2010-11-25 2 views
5

私のディスクに保存されている300個の.sqlファイルの中で、すべてのvarcharをnvarchar、textをntext、charをncharに更新する必要があります。これらのファイルには、ストアドプロシージャ、トリガ、関数、ビューなどが含まれます。これを達成するための最良の方法は何ですか。sqlファイルの置換に最適な手順

+0

回答のコメント(リテラル内に単語が出現する可能性がある)の問題が既にあるため、変更を必要とするタイプを識別するためにファイルを解析する必要があると思われます。 – Orbling

+1

優れたScintillaソースコードエディタコントロール用の.NETラッパーがあります。言語をSQLに設定した後、キーワード、文字列リテラルなど、選択したテキストの構文上の役割を正確に照会するための方法があります。たくさんのファイルがある場合は、調べる価値があります。 – neo2862

+0

ええ..構文解析は行く方法です...あなたは構文解析のアプローチを続ける方法について何らかの方法を提案できますか? – Chinjoo

答えて

2

実際に安全な方法が必要な場合は、構造を実際に理解し、一致するこれらの発生を置き換えるパーサーを使用する必要があります。

私はそれに価値があるかどうかは分かりませんが、自分でコードを作成することはできますか?オープンソースのT-SQLパーサーがファイルを処理できるかどうか試してみることができます。 1つはオープンソースbsn ModuleStore versioning toolsetの一部です。

0

.sqlファイルは何とかテキストファイルです。私はファイルを繰り返し、解析中にこれらの文字列を置き換えます。

+0

文字列定数に "text"という単語が含まれている場合はどうなりますか?私の意見ではかなり一般的です。内部のコメントも置き換えたくないでしょう。単純な検索と置き換えよりも構文認識が必要なものが必要です。 – neo2862

+0

また、テキストと呼ばれる列名があります。その場合もそれらを置き換えるべきではありません。 – Chinjoo

+0

「テキスト」の正しいインスタンスを置き換える方法を確認してください。 'CREATE TABLE'に遭遇したとしましょう。例えば、そこで会った 'text'がデータ型になると言うことができます。さもなければ、300ファイルだけ、それは価値がないかもしれません、あなたは手作業の 'Find ... Replace'を実行している間に手動で行うほうがよいでしょう。 –