2008-11-12 2 views
5

제공된 저장 프로 시저 세트 (SQL Server 2000)를 구문 분석하고 사용되는 모든 테이블과 연결된 열을 가져올 수있는 응용 프로그램이 있습니까? 저장 프로 시저에는 다른 데이터베이스의 테이블이있을 수 있습니다.저장 프로 시저에 대한 SQL 테이블 및 열 구문 분석기

출력 COLUMNA columnC columnD에게 TableA의 것과 같아야합니다

내가 어떤 일에 관심이 http://tsqlparsergdr.codeplex.com

을 참조 할 수 데이터베이스 버전 GDR을 사용하여 작은 응용 프로그램을 작성했습니다

TableB의 columnE columnF columnG

+0

정규 표현식이 올바른 해결책이라고 생각하지 않습니다. 대신 SQL 파서가 필요합니다.이 문서를 확인하십시오 : http://www.dpriver.com/blog/데모 - 설명 - 사용법 - 일반 - sql-parser/get-columns-and-tables-in-sql-script-net-version/ –

답변

1

SHOWPLAN_ALL 설정을 사용하고 출력을 구문 분석 할 수 있습니다.

+0

좋은 제안이지만 나에게는 도움이되지 않습니다. – rsapru

+0

"작동하지 않음"을 정의하십시오. 또는 더 나은 아직 - 작동 정의 정의 :) –

+0

왜 나를 위해 작동하지 않는 저장 프로 시저의 대부분 때문에, 나는 그들이 참조하는 모든 DB를 가지고 있지 않습니다. 및 SHOWPLAN_ALL은 모든 DB가있는 경우에만 작동하는 것으로 보입니다. 그 일종의 분석 작업이 필요합니다. – rsapru

2

아니 구체적인 솔루션을 함께 제공 -하지만 생각의 라인.

잠재적 인 해결책으로 간주되는 sysdepends - 그러나 모두 종속 개체 정보를 포함하는 것으로 악명 높게 신뢰할 수 없습니다.

하지만 Lex/Yacc에서 파생 된 것은 어떨까요? 예를 들어 상업용 파서가 몇 가지 있습니다.

http://www.sqlparser.com/download.php

오픈 소스 구현을 발견하지하지만 난 그 길을 찾아 것이라고 생각합니다.

http://www.google.com/search?hl=en&q=sql+lex+yacc+parse

ANSI SQL에 대한

BNF 구문은 여기에서 찾을 수 있습니다 : 여기에 내 검색을 시작하는 방법은 선택의 렉스 구현

http://savage.net.au/SQL/

을, 이것은 여기에서 비교적 직접적인 엔지니어링 문제로 보인다. (일부 heavylifting이기는하지만 당신이 MS SQL 확장을 지원하려는 경우)

+0

http://www.sqlparser.com/ download.php 좋아 보이지만 그것을 살 수는 없습니다. 오픈 소스 나 프리웨어가 필요합니다. – rsapru

+0

O'Reilly의 YACC & Lex 서적에는 yacc을 기반으로 한 SQL 구문 분석기 샘플이 있습니다. (http://safari.oreilly.com/9781565920002/sql_parser_code) 다른 공용 구현체를 찾을 수 있습니다. 상업용 제품이 있다고해도 그것이 희귀 한 자원이라는 것을 알 수 있습니다. – stephbu

+1

데이터베이스 에디션 GDR을 사용하여 마지막으로 만들 수있었습니다. http://tsqlparsergdr.codeplex.com – rsapru

-1

당신 수 결과 열을 얻을 저장 (개발 환경) 절차 프로그래밍 및 를 호출합니다. 어쩌면 삽입 및 업데이트 프로 시저 호출을 피하기 위해 명명 규칙이있을 수 있습니다. 올바른 매개 변수를 설정하는 방법을 찾아야합니다.

참고 : 저장 프로 시저 (can) 작동 방식 때문에 100 % 신뢰할 수있는 솔루션은 기술적으로 불가능하다고 생각합니다.이 예에서

봐 :

[...] 
@MyDate datetime 

AS 

    IF (day(@MyDate) = 1) 
    BEGIN 
     SELECT * FROM MyFirstTable 
     RETURN 
    END 

    IF (@MyDate > getdate()) 
     SELECT MyID, MyText FROM MySecondTable WHERE ADate > @MyDate 
    ELSE 
     EXEC Other_StoredProcedure @MyType, @MyDate 

그래서 두 가지 문제가 있습니다 : 결과 열은 다를 수 있고 당신은 재귀 적으로 다른 저장 프로 시저를 수행해야합니다.

+0

출력 파싱에 너무 많은 결점이있어 실행 가능하지 않습니다. 일반적인주의 사항에 동의하십시오. - 명시 적으로 선언 된 모든 proc을 구문 분석한다고 가정하면 동적 SQL 문자열을 통해 프로 시저를 암시 적으로 호출 할 가능성이 있습니다. 다시 구문 분석해야합니다. – stephbu

+0

미안하지만 어쩌면 명확하지 않다. 나는 출력을 "파싱"하는 것이 아니라 스토어드 프로 시저를 호출하는 일반적인 방법으로 결과 컬럼을 얻는 것을 의미합니다. 내 대답을 편집 할게. – splattne

+0

그래, 어쩌면 내가 그 질문에 대해 오해 했어. 그러나 rsapru가 의미하는 것이 "그 테이블 내의 모든 테이블과 컬럼이 사용되는 것을 말해주십시오"라는 것이 무엇인지는 분명하지 않았습니다. – splattne

0

sp_depends는

+0

아니요.이 도구는 저에게 효과적이지 않습니다. 시도해 보았습니다. – rsapru

1

내 현재의 요구를 충족하기 위해 정규식을 사용하여 작은 응용 프로그램을 만들기로 결정 도움이 될 것입니다.

답장을 보내 주셔서 감사합니다.

1

sp_depends 나를 위해 완벽하게 작동했습니다. 변경 사항의 영향을받는 테이블 또는 SP를 보여주었습니다

+0

이제는 더 잘 작동합니다 (SQL Server 2008). 종속성이 매우 높은 곳에서 Q는 SQL Server 2000 태그로 지정됩니다. –

+0

죄송합니다. 보지 못했습니다. – DonP

관련 문제