• 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;
        }

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

  • 相关阅读:
    Mongoose Schemas中定义日期以及timestamps选项的妙用
    如何用Linux的命令正确识别cpu的个数和核数【转】
    缓存算法
    使用pm2常见问题
    JavaScript 循环:如何处理 async/await
    常用的Linux操作
    Mysql数据库If语句的使用
    java解析邮箱中的邮件信息
    淘宝分布式数据层TDDL
    maven正式版本和快照版本的区别
  • 原文地址:https://www.cnblogs.com/tangruixin/p/2465917.html
Copyright © 2020-2023  润新知