zoukankan      html  css  js  c++  java
  • Sqlserver in 实现 参数化查询 XML类型解决方案

    1:如果参数是int类型:

    declare @a xml
    set @a='
    <row><id>1</id></row>
    <row><id>5</id></row>
    <row><id>4</id></row>
    <row><id>3</id></row>
    <row><id>2</id></row>'
    select * from product where id in (
    select d.x.value('./id[1]','int') from @a.nodes('/*') as d(x))

    2:如果参数是varchar类型:

    declare @a xml
    set @a='
    <row><name>a</name></row>
    <row><name>b5</name></row>
    <row><name>c4</name></row>
    <row><name>d3</name></row>
    <row><name>e2</name></row>'
    select * from product where pname in (
    select d.x.value('./name[1]','varchar(100)') from @a.nodes('/*') as d(x))

    以第一个为例写的C#简单方法

        public DataSet GetData(List<int> idList) {
            System.Text.StringBuilder idXML = new System.Text.StringBuilder();
            // 把IdList转换成idxml(后面要用到的xml参数的值)
            foreach (var item in idList)
            {
                idXML.AppendFormat("<row><id>{0}</id></row>",item);
            }
    
            System.Text.StringBuilder strSql = new System.Text.StringBuilder();
            strSql.Append("select * from product where id in (");
            // 解析xml参数@a 取出ID 这里可以认为@a是一个特殊的表
            strSql.Append("select d.x.value('./id[1]','int') from @a.nodes('/*') as d(x)");
    
            strSql.Append(")");
            SqlConnection con = new SqlConnection("数据库连接字符串");
            SqlCommand cmd = new SqlCommand(strSql.ToString(), con);
            // 参数赋值
            SqlParameter[] para = new SqlParameter[]{
                new SqlParameter("@a",SqlDbType.Xml){Value= idXML.ToString()}
            };
            cmd.Parameters = para;
    
            // 查询
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            DataSet ds = new DataSet();
            sda.Fill(ds);
            return ds;
        }

    如果认为是好文的请不要吝啬您的推荐,写个文章不容易。

  • 相关阅读:
    Linux Shell 重定向输入和输出
    NDK Cmake
    测试
    20行Python代码爬取王者荣耀全英雄皮肤
    SSH开发模式——Struts2(第一小节)
    JavaWeb开发——软件国际化(动态元素国际化)
    JavaWeb开发——软件国际化(文本元素国际化)
    DBUtils框架的使用(下)
    DBUtils框架的使用(上)
    SSH开发模式——Struts2(第二小节)
  • 原文地址:https://www.cnblogs.com/tangruixin/p/2465917.html
Copyright © 2011-2022 走看看