使用XML作为存储过程的输入的查询构建器

时间:2014-11-12 20:53:18

标签: c# sql xml sql-server-2008 stored-procedures

我想创建一个查询构建器,允许用户通过在网页上选择下拉/文本输入等来构建查询,然后创建包含查询过滤器的XML文件,例如(从网页构建的XML /视图):

<Filters>
   <Filter Table="MyTable" Column="Total" Value="1234" Predicate="0"></Filter>
</Filters>

这个想法是让存储过程接收这个XML标记并以某种方式解析它,以便它转换为类似

的东西
SELECT * FROM MyTable WHERE Total > 1234

我在这里找到了查询XML或者使用XML然后插入表中的示例,但是任何人都可以给我一个简单的示例,说明如何设置proc来解析XML参数并构建SQL?

我正在使用C#(MVC)和SQL Server 2008。

1 个答案:

答案 0 :(得分:1)

您可以使用xsl将xml文件转换为SQL文件。

类似的东西:

<xsl:transform version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:strip-space elements="*"/>
 <xsl:output method="text" omit-xml-declaration="yes"/>
 <xsl:template match="/">
    <xsl:text>&#10;</xsl:text>
    <xsl:for-each select="Filters">
        <xsl:apply-templates select="Filter" />
    </xsl:for-each>

 </xsl:template>
 <xsl:template match="Filter">
    <xsl:text>Select * from </xsl:text><xsl:value-of select="@Table"/>
    <xsl:text> WHERE </xsl:text><xsl:value-of select="@Column"/>
    <xsl:choose>
        <xsl:when test="@Predicate = 0"><xsl:text disable-output-escaping="yes"> &#62; </xsl:text></xsl:when>
        <xsl:when test="@Predicate = 1"><xsl:text disable-output-escaping="yes"> &#60; </xsl:text></xsl:when>
        <xsl:when test="@Predicate = 2"><xsl:text> = </xsl:text></xsl:when>
    </xsl:choose>
    <xsl:value-of select="@Value"/>
    <xsl:text>&#10;</xsl:text>
  </xsl:template>
</xsl:transform>

这将翻译这个:

<Filters>
  <Filter Table="MyTable" Column="Total" Value="1234" Predicate="0"></Filter>
  <Filter Table="MyTable" Column="Total" Value="1234" Predicate="1"></Filter>
</Filters>

进入这个:

Select * from MyTable WHERE Total > 1234
Select * from MyTable WHERE Total < 1234