Синтаксический анализ операторов SQL (получение имени столбца, условия и т. Д.) В .NET - PullRequest
1 голос
/ 12 ноября 2010

В моем приложении у меня есть текстовое поле, в которое пользователь может вставить процедуру, мне нужно проанализировать этот SQL и получить имена таблиц, объединений, столбцов, схемы столбцов и т. Д.

Есть ли в c # легкий способ, вместо использования строковой манипуляции для выполнения этого действия?

Ответы [ 3 ]

1 голос
/ 04 ноября 2011

Без использования сложного синтаксического анализатора SQL не так просто извлечь таблицу, столбец из запроса SQL.Давайте возьмем этот простой SQL, например:

SELECT a.deptno "Department", 
   a.num_emp/b.total_count "Employees", 
   a.sal_sum/b.total_sal "Salary"
FROM
(SELECT deptno, COUNT(*) num_emp, SUM(SAL) sal_sum
 FROM scott.emp
 GROUP BY deptno) a,
(SELECT COUNT(*) total_count, SUM(sal) total_sal
 FROM scott.emp) b

Вам не только нужно получить столбец наподобие: scott.emp.deptno в подзапросе из предложения from, но также нельзя принять num_emp в качестве столбца,это просто псевдоним в подзапросе.

Просто пример, чтобы вы знали, что манипулирование строками или RegEx не работает для этого, вы должны полностью проанализировать SQL , чтобы точно получить желаемый результат.

0 голосов
/ 12 ноября 2010

Вышеупомянутый проект не будет работать для большой процедуры, процедуры, которые содержат более 300 строк Tsql. Можете ли вы предоставить какой-либо альтернативный способ найти его, так как мне нужно использовать

using Microsoft.Data.Schema.ScriptDom.Sql;
using Microsoft.Data.Schema.ScriptDom;

asselmbles.

но теперь я могу получить код, который использует вышеупомянутые сборки.

Основным результатом должны быть имена таблиц и столбцов из данной процедуры хранилища (содержат 300 строк кода).

0 голосов
/ 12 ноября 2010

Здесь - это проект, на который вы можете посмотреть информацию для начинающих.

Редактировать - Это может вам помочь. Если нет, посмотрите на использование RegEx.

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