<address id="ll1nf"><listing id="ll1nf"><mark id="ll1nf"></mark></listing></address>

    <address id="ll1nf"></address>

        <sub id="ll1nf"></sub>

        <thead id="ll1nf"><var id="ll1nf"><output id="ll1nf"></output></var></thead>

        <address id="ll1nf"><dfn id="ll1nf"></dfn></address><form id="ll1nf"><listing id="ll1nf"><mark id="ll1nf"></mark></listing></form>

          <address id="ll1nf"><dfn id="ll1nf"></dfn></address>

          sqlserver 用户定义表类型

          有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的【用户 定义表类型】

          这里最最最重要的思路是把【用户 定义表类型】当作一张虚拟的正常表去处理

           

          分享图片

           

           

          需求:现在内存中有个Datatable,数据库中有张表【TempUser】,需要在内存中取出 Datatable和【TempUser】相同ID的TempUser的信息

          实现:

          1、新建表

          CREATE TABLE TempUser(
          ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
          NAME NVARCHAR(100),
          Age INT
          )
          
          INSERT    TempUser VALUES(a,1)
          INSERT    TempUser VALUES(b,2)
          INSERT    TempUser VALUES(c,3)

          2、新建【用户表类型】

           

          CREATE TYPE temp_20190915 AS TABLE 
          (
              ID INT
          )

           

          3、新建存储过程

          CREATE PROC proc_test_20190915(@temp_20190915 temp_20190915 readonly)
          AS
          BEGIN
          SELECT b.* FROM @temp_20190915 a JOIN TempUser b ON a.ID=b.IDEND

          注意事项:存储过程的参数类型是刚刚新建的【用户表类型】并且是只读的

          此时在存储过程中我们可以把【用户表类型】当作一张正常表的去处理需要的数据(注意是只读)

          4、内存中构建我们的Datatable

                      var data = new DataTable();
                      data.Columns.Add("id", typeof(int));var row1 = data.NewRow();
                      row1["id"] = 1;
                      data.Rows.Add(row1);
          
                      var row2 = data.NewRow();
                      row2["id"] = 2; 
                      data.Rows.Add(row2);

           

          5、调用存储过程

          var p = new System.Data.SqlClient.SqlParameter[1];
          p[0] = new System.Data.SqlClient.SqlParameter("@temp_20190915", data);
          
          var data= Comm.Tool.DbHelper.ExecProcDataSet("proc_test_20190915", p, "数据库连接").Tables[0];
          分享图片
           1 public static DataSet ExecProcDataSet(string procName, SqlParameter[] parameters, string connStr)
           2         {
           3             using (SqlConnection conn = new SqlConnection(connStr))
           4             {
           5                 conn.Open();
           6                 SqlCommand cmd = GetSqlCommand(conn, procName, CommandType.StoredProcedure, parameters);
           7                 cmd.CommandTimeout = 0;
           8                 SqlDataAdapter da = new SqlDataAdapter(cmd);
           9                 DataSet ds = new DataSet();
          10                 da.Fill(ds);
          11                 cmd.Dispose();
          12                 return ds;
          13             }
          14         }
          ExecProcDataSet

           

          6、调试可以看到data就是我们需要的数据

           

          总结:【用户 定义表类型】的方便之处就是可以将内存中Datatable很好的很数据库中的表结合

          相关文章
          相关标签/搜索
          今晚一肖一码 威信县| 银川市| 富源县| 龙陵县| 红桥区| 措勤县| 南漳县| 开阳县| 嘉黎县| 寿阳县| 陇南市| 博湖县| 雷波县| 柳河县| 岑溪市| 嘉荫县| 韩城市| 南通市| 东源县| 资源县| 龙门县| 阆中市| 三江| 浑源县| 玛纳斯县| 藁城市| 册亨县| 博湖县| 来安县| 项城市| 金坛市| 仁寿县| 湟中县| 漳浦县| 普定县| 万山特区| 泊头市| http://fa.hz0j2r3vo.fun http://fa.hz0j1r0vo.fun http://fa.hz0j1r3vo.fun http://fa.hz0j2r7vo.fun http://fa.hz0j2r7vo.fun