2008-11-12 5 views
5

Có một ứng dụng nào có thể phân tích một tập các thủ tục lưu sẵn (SQL Server 2000) và nhận tất cả các bảng và các cột liên quan đang được sử dụng trong nó. Quy trình được lưu trữ có thể có các bảng từ các cơ sở dữ liệu khác nhau.SQL Table và column Parser cho các thủ tục lưu sẵn

Output nên giống như TableA columnA columnC columnD

TableB columnE columnF columnG

Tôi đã viết một ứng dụng nhỏ sử dụng cơ sở dữ liệu bản GDR Bất kỳ ai quan tâm có thể tham khảo http://tsqlparsergdr.codeplex.com

+0

Tôi không nghĩ rằng cụm từ thông dụng là giải pháp đúng, bạn cần một trình phân tích cú pháp SQL thay vào đó, hãy xem bài viết này: http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/get-columns-and-tables-in-sql-script-net-phiên bản/ –

Trả lời

1

Bạn có thể sử dụng cài đặt SHOWPLAN_ALL và phân tích đầu ra.

+0

Là một gợi ý tốt, nhưng nó không hoạt động cho tôi. – rsapru

+0

vui lòng xác định "không hoạt động". hoặc tốt hơn - xác định những gì làm việc :) –

+0

Tại sao nó không làm việc cho tôi là bởi vì hầu hết các thủ tục được lưu trữ mà tôi đang làm việc trên, tôi không có tất cả DB họ tham khảo. và SHOWPLAN_ALL dường như chỉ hoạt động nếu bạn có tất cả DB hiện diện. Đó là một loại công việc phân tích mà tôi cần phải làm. – rsapru

2

Không phải là một giải pháp cụ thể - nhưng một dòng suy nghĩ.

Được coi là sysdepends như một giải pháp tiềm năng - nhưng nó không nổi tiếng là đáng tin cậy khi chứa tất cả thông tin đối tượng phụ thuộc.

nhưng làm thế nào về một cái gì đó Lex/Yacc bắt nguồn? Có một vài trình phân tích cú pháp thương mại, ví dụ:

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

Không nhìn để thực hiện mã nguồn mở nhưng tôi nghĩ rằng tôi sẽ tìm kiếm con đường đó. Đây là cách tôi bắt đầu tìm kiếm của tôi:

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

BNF cú pháp cho ANSI SQL có thể được tìm thấy ở đây:

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

Với một thực hiện lex của sự lựa chọn, điều này có vẻ là một vấn đề kỹ thuật tương đối thẳng về phía trước từ đây. (Dù với một số heavylifting nếu bạn muốn hỗ trợ phần mở rộng MS SQL)

+0

http://www.sqlparser.com/ download.php Có vẻ tuyệt vời nhưng không thể mua nó. Cần một số loại nguồn mở hoặc phần mềm miễn phí. – rsapru

+0

Sách YACC & Lex của O'Reilly có mẫu của trình phân tích cú pháp SQL dựa trên yacc. (http://safari.oreilly.com/9781565920002/sql_parser_code) Bạn có thể tìm thấy các triển khai công khai khác. Đó là một sản phẩm thương mại thậm chí tồn tại cho bạn biết rằng đó là một nguồn tài nguyên khan hiếm. – stephbu

+1

Cuối cùng đã có thể tạo ra một bằng cách sử dụng GDR phiên bản cơ sở dữ liệu .. http://tsqlparsergdr.codeplex.com – rsapru

-1

Bạn có thể gọi thủ tục lưu trữ lập trình (trong một môi trường phát triển) và được các cột kết quả. Có thể bạn có một quy ước đặt tên để tránh gọi thủ tục chèn và cập nhật. Bạn sẽ phải tìm cách để thiết lập các thông số đúng.

Lưu ý: Tôi nghĩ rằng một giải pháp đáng tin cậy 100% là không thể về mặt kỹ thuật, vì cách thức lưu trữ thủ tục (có thể) hoạt động.

Nhìn vào ví dụ này:

[...] 
@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 

Vì vậy, có hai vấn đề: các cột kết quả có thể khác nhau và bạn sẽ phải làm theo thủ tục được lưu trữ một cách đệ quy khác.

+0

Việc phân tích cú pháp đầu ra có quá nhiều sai sót để có thể thực hiện được. Đồng ý với lưu ý chung tho '- giả sử rằng bạn phân tích cú pháp tất cả các khai báo rõ ràng của proc vẫn còn tiềm ẩn để ngầm gọi các thủ tục thông qua các chuỗi SQL động - một lần nữa bạn phải phân tích cú pháp v.v. – stephbu

+0

Xin lỗi, có thể tôi đã không rõ ràng. Tôi không có nghĩa là "phân tích cú pháp" đầu ra, nhưng nhận được các cột kết quả theo cách thông thường, chỉ cần gọi thủ tục được lưu trữ. Tôi sẽ chỉnh sửa câu trả lời của mình. – splattne

+0

Ok, có thể tôi đã hiểu nhầm câu hỏi. Nhưng nó không rõ ràng đối với tôi, những gì rsapru có nghĩa là bởi "cho tôi biết tất cả các bảng và cột trong bảng đó đang được sử dụng." – splattne

0

sp_depends sẽ giúp

+0

không có điều này không làm việc cho tôi đã thử rằng ra – rsapru

1

Quyết định tạo một ứng dụng nhỏ bằng Regex để đáp ứng các nhu cầu hiện tại của tôi.

Cảm ơn tất cả các bạn đã trả lời.

1

sp_depends Làm việc hoàn hảo cho tôi. Nó cho thấy những gì bảng hoặc SP có thể bị ảnh hưởng bởi những thay đổi của tôi

+0

Điều này hoạt động tốt hơn rất nhiều (SQL Server 2008). Q được gắn thẻ SQL Server 2000 mặc dù phụ thuộc rất ropey. –

+0

Xin lỗi, không thấy điều đó – DonP