2009-06-10 9 views
1

誰かがVB.NETでSQLテキストを解析する方法を知っていますか?SQLテキストの解析

例:私はSQLファイル "CREATE TABLE ..."を取得しました。私は列の配列とデータ型の配列を取得したいと思います。

+0

ファイルのサンプルを投稿していない理由は、おそらく誰かがあなたに正確に何を伝えることができるようになりますがそうする必要があります。キーワードを探しているのは "CREATE TABLE"です。 –

答えて

3

Tomalakのポスト@に拡大:あなたが構築されたテーブルを持っていたら、あなたは唯一のスキーマまたはあなたの実際のデータを必要とする場合は、このような何かをした後、わずか1行を選択するために、DataReaderを使用することができます。

Dim myReader As DataReader 
Dim myTable As DataTable 

Dim myColumns As New Collection 

myReader = //' get your data 

If myReader.HasRows Then 
    myTable.Load(myReader) 
    For Each col As DataColumn In myTable.Columns 
     myColumns.Add(col.DataType.ToString, col.ColumnName) 
    Next 
End If 

コレクションmyColumnsの列名がKeyになり、Valueが列データ型になります。これを修正して、必要に応じて2つの別々のコレクションにすることができます。

一方、文字列を解析すると、大幅にデバッグが多くなり、エラーの余地が大きくなります。

+0

が問題を解決します。ありがとうございました Theresは列データを検索しますタイプ(およびその最大値)?ありがとう –

+0

Nvm、実際に感謝しました! –

+0

@ロブアレン:うーん...私はそれを投票しなければならないと思う。 :-) – Tomalak

4

SQL Serverにその文を入力するのが最も簡単な方法かもしれません。実際にそのテーブルを一時データベースに作成してください。

その後、テーブル構造について調べるのは簡単です。

文の文字列を解析する必要があるのは、テーブルの名前です。さらにうまくいけば、それを置き換えるだけで、最初からテーブル名を知ることができます。

さらに、ステートメントが有効なSQLでもある場合は、情報を取得します。

+0

私がしなければならないことは、文の文字列を解析することです。私はすでにそれを知っています。 –

+1

いいえ、あなたは私を誤解しています。あなたが知っているのは、小さな部分文字列/ indexOfルーチン(またはそれらを知っていれば正規表現さえ)を使って簡単に行える*テーブル名*です。 – Tomalak

+0

@Tomalak:そのコメントに対する忍耐力+1! ;-) – Cerebrus

0

this demo to help you Analyzing DDL statement

入力SQLを確認してください:

create table new_employees 
(
    employee_id number primary key, 
    first_name varchar2(15) null, 
    last_name varchar2(15) check(last_name>10), 
    hire_date date default sysdate, 
    dept_id number, 
    dept_name varchar2(100), 
    start_date timestamp(7) references scott.dept(start_date), 
    end_date timestamp(7) references dept.end_date on delete cascade, 
    check (start_date>end_date), 
    constraint c_name unique(first_name,last_name), 
    foreign key(dept_id,dept_name) references dept(id,name) 
); 

生成される出力:

Table Name:new_employees 
Columns: 
name:employee_id 
datetype:number 
inline constraints: 
    primary key 

name:first_name 
datetype:varchar2(15) 
null: yes 

name:last_name 
datetype:varchar2(15) 
inline constraints: 
    check:last_name>10 

name:hire_date 
datetype:date 
default:sysdate 

name:dept_id 
datetype:number 

name:dept_name 
datetype:varchar2(100) 

name:start_date 
datetype:timestamp(7) 
inline constraints: 
    foreign key 
    referenced table:scott.dept 
    referenced columns:start_date 

name:end_date 
datetype:timestamp(7) 
inline constraints: 
    foreign key 
    referenced table:dept.end_date 

outline constraints: 
    check:start_date>end_date 

    constraint name:c_name 
    unique key 
    columns:first_name,last_name 

    foreign key 
    columns:dept_id,dept_name 
    referenced table:dept 
    referenced columns:id,name