sqlserver 用户定义表类型

sqlserver 用户定义表类型,第1张

概述有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的【用户 定义类型】 这里最最最重要的思路是把【用户 定义表类型】当作一张虚拟的正常表去处理       需求:现在内存中有个Datatable,数据库中有张表【TempUser】,需要在内存中取出 Datatable和【TempUser】相同ID

有时需要将内存中的表与数据库中的表比较,比如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)ASBEGINSELECT 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很好的很数据库中的表结合

总结

以上是内存溢出为你收集整理的sqlserver 用户定义表类型全部内容,希望文章能够帮你解决sqlserver 用户定义表类型所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1176265.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存