• <menu id="oia2w"><acronym id="oia2w"></acronym></menu>
  • <menu id="oia2w"></menu>
  • <input id="oia2w"><u id="oia2w"></u></input>
  • <menu id="oia2w"></menu><input id="oia2w"></input>
  • 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.hz0j0r0vo.fun http://fa.hz0j2r5vo.fun http://fa.hz0j0r5vo.fun http://fa.hz0j0r5vo.fun http://fa.hz0j2r9vo.fun