[SQL] C #으로 SQL 코드를 파싱 [폐쇄]
SQLC #으로 SQL 코드를 파싱 [폐쇄]
전 C #을 사용하여 SQL 코드를 구문 분석합니다.
특히, SQL 코드를 분석하고 나무 또는 그 밖의 다른 구조를 생성 할 수있는 무료로 사용할 수 파서가? 또한 중첩 된 구조에 대한 적절한 트리를 생성해야합니다.
또한이 나무의 노드가 나타내는 문장의 종류를 반환해야합니다.
노드가 다음 루프 조건을 포함하는 경우, 예를 들어,이 노드의 "루프 형"인 것으로 리턴한다.
또는 나는 C #의 코드를 분석하고 내가 원하는 형태의 트리를 생성 할 수있는 방법이 있습니까?
해결법
-
==============================
1.사용 마이크로 소프트 엔티티 프레임 워크 (EF).
사용 마이크로 소프트 엔티티 프레임 워크 (EF).
또한, 식 트리를 빌드 "법인 SQL"파서를 가지고
using System.Data.EntityClient; ... EntityConnection conn = new EntityConnection(myContext.Connection.ConnectionString); conn.Open(); EntityCommand cmd = conn.CreateCommand(); cmd.CommandText = @"Select t.MyValue From MyEntities.MyTable As t"; var queryExpression = cmd.Expression; .... conn.Close();
또는 그런 일이 MSDN에 체크 아웃.
그리고 그것은 Ballmers 진드기에 전부 :-)
또한 코드 프로젝트에 하나, SQL 파서있다.
행운을 빕니다.
-
==============================
2.특히 거래-SQL (마이크로 소프트 SQL 서버) 당신은 Microsoft.SqlServer.Management.SqlParser.dll에서 사용할 수있는 Microsoft.SqlServer.Management.SqlParser.Parser 네임 스페이스, 어셈블리 자유롭게 배포 할 수 SQL Server와 함께 제공 할 수 있습니다.
특히 거래-SQL (마이크로 소프트 SQL 서버) 당신은 Microsoft.SqlServer.Management.SqlParser.dll에서 사용할 수있는 Microsoft.SqlServer.Management.SqlParser.Parser 네임 스페이스, 어셈블리 자유롭게 배포 할 수 SQL Server와 함께 제공 할 수 있습니다.
여기서 토큰들의 시퀀스에 캐릭터로서 T-SQL을 파싱하기위한 방법의 예이다 :
IEnumerable<TokenInfo> ParseSql(string sql) { ParseOptions parseOptions = new ParseOptions(); Scanner scanner = new Scanner(parseOptions); int state = 0, start, end, lastTokenEnd = -1, token; bool isPairMatch, isExecAutoParamHelp; List<TokenInfo> tokens = new List<TokenInfo>(); scanner.SetSource(sql, 0); while ((token = scanner.GetNext(ref state, out start, out end, out isPairMatch, out isExecAutoParamHelp)) != (int)Tokens.EOF) { TokenInfo tokenInfo = new TokenInfo() { Start = start, End = end, IsPairMatch = isPairMatch, IsExecAutoParamHelp = isExecAutoParamHelp, Sql = sql.Substring(start, end - start + 1), Token = (Tokens)token, }; tokens.Add(tokenInfo); lastTokenEnd = end; } return tokens; }
TokenInfo 클래스는 위에서 언급 된 특성을 가진 단순한 클래스합니다.
토큰이 나열되어 있습니다 :
등 TOKEN_BEGIN, TOKEN_COMMIT, TOKEN_EXISTS 같은 상수를 포함
-
==============================
3.스콧 Hanselman은 최근 샘플 SQL 파서를 포함하는 아이러니 프로젝트를 선보였습니다.
스콧 Hanselman은 최근 샘플 SQL 파서를 포함하는 아이러니 프로젝트를 선보였습니다.
-
==============================
4.당신은 상업 구성 요소를 살펴 수 있습니다 : 일반 SQL 파서를 http://www.sqlparser.com에서 그것은 오라클, T-SQL, DB2와 MySQL의 SQL 구문을 지원합니다.
당신은 상업 구성 요소를 살펴 수 있습니다 : 일반 SQL 파서를 http://www.sqlparser.com에서 그것은 오라클, T-SQL, DB2와 MySQL의 SQL 구문을 지원합니다.
-
==============================
5.ANTLR 시도 - 거기에 SQL 문법의 무리가 있습니다.
ANTLR 시도 - 거기에 SQL 문법의 무리가 있습니다.
-
==============================
6.VSTS 2008 데이터베이스 버전 GDR은 핸들 SQL 구문 분석 및 스크립트 생성이 프로젝트에서 참조 할 수있는 어셈블리가 포함되어 있습니다. 데이터베이스 버전은 데이터베이스의 메모리 모델을 대표하는 스크립트 파일을 구문 분석 파서를 사용하고 모델에서 SQL 스크립트를 생성하는 스크립트 생성기를 사용합니다. 난 그냥 두 어셈블리는 당신이 당신의 프로젝트에서 참조 할 필요가 있다고 생각합니다. 데이터베이스 버전이없는 경우에는 어셈블리를 얻을 수있는 시험 버전을 설치하거나 데이터베이스 버전을 설치하지 않고 그것들을 가지고있는 또 다른 방법이있을 수 있습니다. 다음 링크를 확인하세요. 데이터 야 : 크라운 보석에 도착.
VSTS 2008 데이터베이스 버전 GDR은 핸들 SQL 구문 분석 및 스크립트 생성이 프로젝트에서 참조 할 수있는 어셈블리가 포함되어 있습니다. 데이터베이스 버전은 데이터베이스의 메모리 모델을 대표하는 스크립트 파일을 구문 분석 파서를 사용하고 모델에서 SQL 스크립트를 생성하는 스크립트 생성기를 사용합니다. 난 그냥 두 어셈블리는 당신이 당신의 프로젝트에서 참조 할 필요가 있다고 생각합니다. 데이터베이스 버전이없는 경우에는 어셈블리를 얻을 수있는 시험 버전을 설치하거나 데이터베이스 버전을 설치하지 않고 그것들을 가지고있는 또 다른 방법이있을 수 있습니다. 다음 링크를 확인하세요. 데이터 야 : 크라운 보석에 도착.
-
==============================
7.GOLD 파서를 시도, 그것은 BNF 엔진을 배울 강력하고 쉬운입니다. 당신은 이미 당신이 원하는 것을 위해 만든 문법을 검색 할 수 있습니다 (예 : SQL ANSI 89 문법).
GOLD 파서를 시도, 그것은 BNF 엔진을 배울 강력하고 쉬운입니다. 당신은 이미 당신이 원하는 것을 위해 만든 문법을 검색 할 수 있습니다 (예 : SQL ANSI 89 문법).
나는 HQL 구문 분석 (SQL과 매우 유사한 NHibernate에 쿼리 언어)이 사용하기 시작하고 끝내.
업데이트 : 이제 NH 데브 팀은 ANTLR 사용하여 분석 HQL (사용 어렵습니다,하지만 더 강력한 AFAIK)를 수행하고있다.
-
==============================
8.디에고 제안으로, 문법은 이럴을 갈 수있는 방법입니다. 나는 코코 / 이전 연구를 시도했다, 그러나 그것은 복잡한 SQL 너무 간단합니다. ANTLR 준비 문법의 번호가있다.
디에고 제안으로, 문법은 이럴을 갈 수있는 방법입니다. 나는 코코 / 이전 연구를 시도했다, 그러나 그것은 복잡한 SQL 너무 간단합니다. ANTLR 준비 문법의 번호가있다.
C #으로 작성된 SQL 엔진 - 사람이 심지어는 SQL 엔진을 구축 SharpHSQL에서 당신을 위해 무언가가 있다면 코드를 확인하기 위해 노력했다.
from https://stackoverflow.com/questions/589096/parsing-sql-code-in-c-sharp by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 매개 변수는 정말 충분히 SQL 삽입을 방지 할 수 있습니까? (0) | 2020.03.18 |
---|---|
[SQL] SQLite는 날짜 시간 비교 (0) | 2020.03.18 |
[SQL] 컬럼에서 고유 한 값을 선택 (0) | 2020.03.18 |
[SQL] NVL과 합체 사이 오라클의 차이 (0) | 2020.03.18 |
[SQL] 는 SQL 서버 VARCHAR / NVARCHAR 문자열에서 줄 바꿈을 삽입하는 방법 (0) | 2020.03.18 |