我想创建一个查询构建器,允许用户通过在网页上选择下拉/文本输入等来构建查询,然后创建包含查询过滤器的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。
答案 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> </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"> > </xsl:text></xsl:when>
<xsl:when test="@Predicate = 1"><xsl:text disable-output-escaping="yes"> < </xsl:text></xsl:when>
<xsl:when test="@Predicate = 2"><xsl:text> = </xsl:text></xsl:when>
</xsl:choose>
<xsl:value-of select="@Value"/>
<xsl:text> </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