SQL Formatter с использованием C # - PullRequest
6 голосов
/ 22 декабря 2009

Мне нужно создать средство форматирования SQL в C #. Может ли кто-нибудь указать мне на некоторые ресурсы в сети? Нужно ли реализовывать полноценный парсер или есть более простой способ сделать это?

Ответы [ 4 ]

5 голосов
/ 22 декабря 2009

Посмотрите на

Синтаксический анализ кода SQL в C #

Также посмотрите на

Sql Pretty Printer

4 голосов
/ 13 марта 2012

Хм, еще один вопрос, с которым я сталкиваюсь много позже, но на тот случай, если это пригодится кому-либо еще в будущем, я реализовал форматер T-SQL с открытым исходным кодом (AGPL): http://www.architectshack.com/PoorMansTSqlFormatter.ashx

Мой подход определенно не подразумевает полный синтаксический анализ SQL (T-SQL - очень сложный язык, я не оцениваю свои шансы на разработку и поддержание полного синтаксического анализатора самостоятельно), а скорее разбираю и затем определяю основные структуры в SQL по ключевому слову. Результатом является частичное дерево синтаксического анализа со всеми выделенными частями форматирования.

Как отмечалось в ответах на вопрос @astander, связанный с, существуют коммерческие варианты комплексного разбора SQL и множество компоновщиков синтаксических анализаторов, но нет полных анализаторов T-SQL с открытым исходным кодом, о которых я знаю.

Создание синтаксического анализатора для простых операций выбора, обновления, удаления очень просто - обработка производных таблиц и подзапросов становится немного сложнее; затем предложения OUTPUT, операторы MERGE, сценарии с несколькими операторами, CTE, десятки операторов DDL, содержащихся в T-SQL, и т. д .: он становится беспорядочным.

3 голосов
/ 02 марта 2011

Когда я нахожусь в затруднительном положении и мне нужно, чтобы что-то выглядело как минимум «отформатированным», я перехожу на

http://www.dpriver.com/pp/sqlformat.htm

1 голос
/ 31 июля 2013

Существует также средство SQLinForm SQL Beautifier, которое имеет C # API на www.sqlinform.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...