2009-06-10 4 views
1

누구나 VB.NET으로 SQL 텍스트를 구문 분석하는 방법을 알고 있습니까?SQL 구문 분석 텍스트

예 : SQL 파일 "CREATE TABLE ..."이 있습니다. 열의 배열과 데이터 유형의 배열을 가져오고 싶습니다.

+0

왜 파일의 샘플을 게시하지는, 아마도 누군가가 당신을 말할 수있을 것입니다 정확히 무엇을 당신에게 해야 할 일. 주요 단어를 찾는 것과 같이 "CREATE TABLE"이 있습니다. –

답변

3

: 당신이 테이블이 구축되면 당신은 스키마 또는 실제 데이터를 필요로하는 경우 단지 한 라인을 선택하기 위해 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

@ Rob Allen : 흠 ... 그걸 투표해야 겠군. :-) – Tomalak

4

해당 문을 SQL Server에 공급하는 가장 쉬운 방법 일 수 있으며 실제로 임시 데이터베이스에 해당 테이블을 만듭니다.

그런 다음 테이블 구조를 쉽게 파악할 수 있습니다.

명세서 문자열에서 구문 분석해야하는 것은 테이블 이름입니다. 더 나은 점은 단순히 테이블을 교체하고 처음부터 알려진 테이블 이름을 가질 수 있다는 것입니다.

또한 진술이 유효한 SQL이라면 정보를 얻을 수 있습니다. Tomalak의 게시물 @에 확장

+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