加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sqlserver 用户定义表类型

发布时间:2020-12-12 14:16:52 所属栏目:MsSql教程 来源:网络整理
导读:有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用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很好的很数据库中的表结合

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读