是否有针对SQL的标准XML查询编码?

时间:2009-05-05 19:29:32

标签: sql xml standards

是否有将SQL查询编码为XML的标准方法?我的意思是

select name from users where name like 'P%' group by name order by name desc

可能编码为(我的5分钟模型,可能是线轴)......

<?xml version="1.0" encoding="UTF-8"?>
<query>
    <select>
        <table name="users">
            <column name="name"/>
        </table>
    </select>
    <from>
        <table name="users"/>
    </from>
    <where>
        <operator name="like">
            <column name="name"/>
            <value>P%</value>
        </operator>
    </where>
    <aggregation>
        <groupby>
            <column name="name"/>
        </groupby>
    </aggregation>
    <order>
        <order-by>
            <column name="name" order="desc"/>
        </order-by>
    </order>
</query>

...这样可以轻松构建,存储,验证结构和内容(通过基于数据库模式生成模式)等。

5 个答案:

答案 0 :(得分:5)

我不知道任何这样的标准。你到目前为止看起来很可行。我问你为什么要这样做。我认为这是一个内部平台(反模式)。此外,它还特别重新发明了SQL,这是反模式的一个众所周知的例子。最重要的是,它是用XML编程的,这被广泛认为是一个坏主意。

SQL语法非常简单,您可以使用普通的解析器生成器工具在短时间内为它构建解析器(Web上可能存在一些开源的)。这将是一种更清晰的验证SQL语法的方法。

答案 1 :(得分:2)

我一直在尝试做同样的事情。

在评论中回答我为什么要这样做的问题。好吧,我想用一组可用列和过滤条件定义一个基本查询,我想让用户选择他们想要显示的列,并启用和禁用where子句中的某些表达式。

我已经玩了一些XML模式的变体并得到了一些不错的结果。我甚至能够根据用户的偏好应用XSLT来提取SQL文本。

我也一直在寻找SQL解析器。 http://www.sqlparser.com有一个,但它的商业版本和它的API是严格的德尔福风格,在我看来不太容易访问。

正如其他人所说,使用像ANTLR这样的东西来生成将解析SQL的C#代码是可行的。您可以找到一些SQL语法here。最近列出的MS SQL Gramar是MS SQL 2000.我没有时间玩这个东西。

我希望在Oslo SDK中有一个可以解析查询的M Grammer,但我还没有找到。

答案 2 :(得分:1)

没有一个标准。可能你不应该做你想做的事。但如果我要去,我会看一个: (1)对xml查询计划中的一些构造进行标准化。默认sql 2005安装上的XSD位于C:\ Program Files \ Microsoft SQL Server \ 90 \ Tools \ Binn \ schemas \ sqlserver \ 2004 \ 07 \ showplan \ showplanxml.xsd

(2)Sql 2008在IDE中附带了intellisense,它似乎是在这个.net程序集的帮助下实现的 - C:\ Program Files \ Microsoft SQL Server \ 100 \ Tools \ Binn \ VSShell \ Common7 \ IDE \ Microsoft.SqlServer.SqlParser.dll 如果添加对此程序集的引用,则可以解析源脚本并提取解析器程序集提供的xml定义。 E.g。

SqlScript script = Parser.Parse(strSqlScript);
foreach (SqlBatch batch in script.Batches)
{
  foreach (SqlStatement s in batch.Statements)
  {
    Console.Write(s.Xml);
  }
}

您可能会发现它提供的xml定义可以根据您的需要重复使用。

答案 3 :(得分:1)

XQuery是一种XML查询语言,支持与SQL相同的一些想法。这些不是可以理解的语言,但是如果你熟悉SQL,你也不应该对XQuery太麻烦。

据我所知,XQuery只有一个实际的实现,exist

除了一般的探索性兴趣外,我还没有使用过这两种技术。

答案 4 :(得分:0)

好吧,我只是在思考这个问题,试图记住它是如何为CRM做的,它在定义实体时动态构建表。

然后我在几分钟前偶然发现了正确的名字“fetchXML”

http://msdn.microsoft.com/en-us/library/gg328117.aspx

当然这是MS的所有者,但至少你可以肯定他们已经涵盖了任何可能的情况。