Intereting Posts
Совокупные функции по нескольким столбцам в postgres Что говорит SQL Standard об использовании обратного хода (`)? SQL: Обновить таблицу с изображением из папки, по id # Выберите различные текущие и предыдущие столбцы из таблицы sql C # ASP.NET (VS 2008 Exp) База данных сохраняет значение иврита из UPDATE как '?' Обновить таблицу на основе другой таблицы Продолжающиеся вставки в Oracle при возникновении исключения Правильный JOIN для добавления четвертой таблицы в запрос C # Создать запрос для сравнения DateTime с SQL Nvarchar date Column C # Winform – как отображать отчеты в реальном времени, передавая 3 переменным ReportViewer, а именно: имя отчета (файл RDL), SQLstring и ConnectionString Поддержка интеграции служб Sql Server 2008-2005 Можно ли использовать ограничение SQL для предотвращения изменения определенного значения при выполнении условия? Как сравнить две базы данных SQLite в Linux Использование записи ADODB, установленной для выполнения объединенного запроса на обновление выберите * vs select column

API или инструменты для преобразования SQL (запросы SELECT) в XML FORM

Нужна помощь в преобразовании SQL-запросов в какой-то стандартный формат XML.

Например, скажем, у меня есть запрос «SELECT A, B, C FROM XYZ WHERE B = C AND A> 2"

Я должен получить результат как

<QUERY> <SELECT> <COLUMNS> <COLUMN>A</COLUMN> <COLUMN>B</COLUMN> <COLUMN>B</COLUMN> </COLUMNS> </SELECT> <FROM> <TABLES> </TABLES> </FROM> <WHERE> <CONDITIONS> <AND> <CONDITION> <EQUALS> <VARIABLE>B</VARIABLE> <VARIABLE>C</VARIABLE> </EQUALS> </CONDITION> <CONDITION> <GREATER> <VARIABLE>A</VARIABLE> <VARIABLE>2</VARIABLE> </GREATER> </CONDITION> </AND> </CONDITIONS> </WHERE> </QUERY> 

Пожалуйста, предложите мне некоторые API или инструменты, которые могут предоставить мне этот результат XML.

посмотрите на эту ссылку в codeproject SQL Parser, это даст вам отличную идею,

Это выглядит интересно. Хотя и в конце моего ответа, я попробовал следующее, чтобы узнать, могу ли я приблизиться к тому, чтобы придумать способ сделать это. Это требует больше работы, но я считаю, что с помощью этого формата вы можете найти подходящее решение.

  SET NOCOUNT ON ------------------------------------------------------------------------------ ----------- DECLARE VARIABLES AND TABLES ------------------------------------- ------------------------------------------------------------------------------ DECLARE @QueryID INT DECLARE @SelectID INT DECLARE @ColumnsBeginID INT DECLARE @ColumnsEndID INT DECLARE @FromID INT DECLARE @TablesBeginID INT DECLARE @TablesEndID INT DECLARE @WhereID INT DECLARE @ConditionsBeginID INT DECLARE @ConditionsEndID INT DECLARE @XMLQuery XML = '<QUERY></QUERY>' DECLARE @Query TABLE ( QueryID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [SELECT] INT NOT NULL , [FROM] INT NOT NULL , [WHERE] INT NULL ) DECLARE @Select TABLE ( SelectID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [COLUMNS_BEGIN] INT NOT NULL , [COLUMNS_END] INT NOT NULL ) DECLARE @Column TABLE ( ColumnID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [Column] SYSNAME NOT NULL , [TableAlias] SYSNAME NOT NULL , [ColumnAlias] SYSNAME NOT NULL ) DECLARE @From TABLE ( FromID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [TABLES_BEGIN] INT NOT NULL , [TABLES_END] INT NOT NULL ) DECLARE @Table TABLE ( TableID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [Join] SYSNAME NOT NULL , [Tablename] SYSNAME NOT NULL , [TableAlias] SYSNAME NOT NULL , [On] SYSNAME NOT NULL ) DECLARE @Where TABLE ( WhereID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [CONDITIONS_BEGIN] INT NOT NULL , [CONDITIONS_END] INT NOT NULL ) DECLARE @Condition TABLE ( ConditionID INT NOT NULL IDENTITY (1,1) PRIMARY KEY , [AndOr] SYSNAME NOT NULL , [Equality] SYSNAME NOT NULL , [Variable1] SYSNAME NOT NULL , [Variable2] SYSNAME NOT NULL ) ------------------------------------------------------------------------------ ----------- USERS QUERY HERE ------------------------------------------------- ------------------------------------------------------------------------------ --SELECT A, B, C FROM XYZ WHERE B = C AND A > 2 INSERT INTO @Column ([Column], [TableAlias], [ColumnAlias]) VALUES ('A', 'x', 'a') SET @ColumnsBeginID = @@IDENTITY INSERT INTO @Column ([Column], [TableAlias], [ColumnAlias]) VALUES ('B', 'x', 'b') INSERT INTO @Column ([Column], [TableAlias], [ColumnAlias]) VALUES ('C', 'x', 'c') SET @ColumnsEndID = @@IDENTITY INSERT INTO @Select ([COLUMNS_BEGIN], [COLUMNS_END]) VALUES (@ColumnsBeginID, @ColumnsEndID) SET @SelectID = @@IDENTITY INSERT INTO @Table ([Join], [Tablename], [TableAlias], [On]) VALUES ('FROM', 'XYZ', 'x', '') SET @TablesBeginID = @@IDENTITY SET @TablesEndID = @TablesBeginID INSERT INTO @From ([TABLES_BEGIN], [TABLES_END]) VALUES (@TablesBeginID, @TablesEndID) SET @FromID = @@IDENTITY INSERT INTO @Condition ([AndOr], [Equality], [Variable1], [Variable2]) VALUES ('AND','EQUALS','B','C') SET @ConditionsBeginID = @@IDENTITY INSERT INTO @Condition ([AndOr], [Equality], [Variable1], [Variable2]) VALUES ('AND','GREATER','A','2') SET @ConditionsEndID = @@IDENTITY INSERT INTO @Where ([CONDITIONS_BEGIN], [CONDITIONS_END]) VALUES (@ConditionsBeginID, @ConditionsEndID) SET @WhereID = @@IDENTITY INSERT INTO @Query ([SELECT], [FROM], [WHERE]) VALUES (@SelectID, @FromID, @WhereID) ------------------------------------------------------------------------------ ----------- BUILD THE @XMLQuery VARIABLE ------------------------------------- ------------------------------------------------------------------------------ SET @XMLQuery = (SELECT SelectColumn = c.[Column] , SelectColumnTableAlias = c.[TableAlias] , SelectColumnColumnAlias = c.[ColumnAlias] , FromTableJoin = t.[Join] , FromTable = t.[Tablename] , FromTableAlias = t.[TableAlias] , FromOn = t.[On] , WhereConditionAndOr = n.[AndOr] , WhereConditionEquaility = n.[Equality] , WhereConditionVariable1 = n.[Variable1] , WhereConditionVariable2 = n.[Variable2] FROM @Query q JOIN @Select s ON s.SelectID = q.[SELECT] JOIN @From f ON f.FromID = q.[FROM] JOIN @Where w ON w.WhereID = q.[WHERE] JOIN @Column c ON c.ColumnID BETWEEN s.[COLUMNS_BEGIN] AND s.[COLUMNS_END] JOIN @Table t ON t.TableID BETWEEN f.[TABLES_BEGIN] AND f.[TABLES_END] JOIN @Condition n ON n.ConditionID BETWEEN w.[CONDITIONS_BEGIN] AND w.[CONDITIONS_END] ORDER BY c.ColumnID , t.TableID , n.ConditionID FOR XML AUTO, ROOT ('QUERY') --FOR XML RAW, ROOT ('QUERY') --FOR XML PATH, ROOT ('QUERY') ) SELECT @XMLQuery