经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
sqlserver 用户定义表类型
来源:cnblogs  作者:RJXS  时间:2019/9/16 9:12:31  对本文有异议

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

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

 

 

 

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

实现:

1、新建表

  1. CREATE TABLE TempUser(
  2. ID INT NOT NULL IDENTITY(1,1) PRIMARY KEY,
  3. NAME NVARCHAR(100),
  4. Age INT
  5. )
  6. INSERT TempUser VALUES('a',1)
  7. INSERT TempUser VALUES('b',2)
  8. INSERT TempUser VALUES('c',3)

2、新建【用户表类型】

 

  1. CREATE TYPE temp_20190915 AS TABLE
  2. (
  3. ID INT
  4. )

 

3、新建存储过程

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

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

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

4、内存中构建我们的Datatable

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

 

5、调用存储过程

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

 

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

 

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

 

原文链接:http://www.cnblogs.com/xiao-sheng/p/11521682.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号