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

    原文: http://www.cnblogs.com/tangruixin/archive/2012/04/23/2465917.html

    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;
        }
    复制代码
  • 相关阅读:
    (原)在ubuntu 中安装 swi prolog 和 简单的使用
    (转) 新手入门:C/C++中的结构体
    (转) eclipse debug (调试) 学习心得
    flutter: 根视图、根元素与根渲染
    eggjs的参数校验模块egg-validate的使用和进一步定制化升级
    Vue源码中用到的工具函数
    21 项优化 React App 性能的技术
    react-redux 的使用
    编写 Vue.js 组件前需要知道的 10 件事
    Flutter实现抽屉动画效果
  • 原文地址:https://www.cnblogs.com/zhuangke668/p/5029106.html
Copyright © 2011-2022 走看看