誰かがVB.NETでSQLテキストを解析する方法を知っていますか?SQLテキストの解析
例:私はSQLファイル "CREATE TABLE ..."を取得しました。私は列の配列とデータ型の配列を取得したいと思います。
誰かがVB.NETでSQLテキストを解析する方法を知っていますか?SQLテキストの解析
例:私はSQLファイル "CREATE TABLE ..."を取得しました。私は列の配列とデータ型の配列を取得したいと思います。
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つの別々のコレクションにすることができます。
一方、文字列を解析すると、大幅にデバッグが多くなり、エラーの余地が大きくなります。
が問題を解決します。ありがとうございました Theresは列データを検索しますタイプ(およびその最大値)?ありがとう –
Nvm、実際に感謝しました! –
@ロブアレン:うーん...私はそれを投票しなければならないと思う。 :-) – Tomalak
SQL Serverにその文を入力するのが最も簡単な方法かもしれません。実際にそのテーブルを一時データベースに作成してください。
その後、テーブル構造について調べるのは簡単です。
文の文字列を解析する必要があるのは、テーブルの名前です。さらにうまくいけば、それを置き換えるだけで、最初からテーブル名を知ることができます。
さらに、ステートメントが有効なSQLでもある場合は、情報を取得します。
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
ファイルのサンプルを投稿していない理由は、おそらく誰かがあなたに正確に何を伝えることができるようになりますがそうする必要があります。キーワードを探しているのは "CREATE TABLE"です。 –