表值类型是在sql server 2008中新加入的功能,我个人觉得确实很有用,之前从没用过,自从来到现在的公司后学到很多东西,所以和大家分享一下。

------建表值类型语法--------------------------

CREATE TYPE tpTest  AS TABLE(

name NVARCHAR(50) NULL,

Age int NULL,

[Address] NVARCHAR(200) NULL

)

--------最普通的用法

DECLARE @table  dbo.tpTest

---------插入

INSERT INTO @table(name,age,address)

SELECT '小王',43,'清河'

---------查询

SELECT * FROM @table

--------------------------------------------------------我是华丽的分割线------------------------------------------------------------------------

还有一种用法就是C#调用存储过程时使用,这种方法大量用于导入之类的功能实现。

------建表--------------------------

CREATE TABLE TBTest (

id INT IDENTITY(1,1) PRIMARY KEY,

name NVARCHAR(50) NULL,

Age int NULL,

[Address] NVARCHAR(200) NULL

)

go

------建存储过程--------------------------

CREATE PROCEDURE sp_Test_insert

@execelDT tpTest READONLY

AS

BEGIN

-------读取表类型的值并插入到数据表中

INSERT INTO dbo.TBTest(  name, Age, Address )

SELECT name,Age,Address from @execelDT

end

------------------------------------------------------C#后台代码-------------------------------------------------------------------

static void Main(string[] args)

{

string
connectionString = "Server=.;initial catalog=Test;user
id=sa;password=sa;Connect Timeout=30";

SqlConnection
connectionObj = new SqlConnection(connectionString);  //建立连接对象

SqlCommand
sqlcom =new SqlCommand("sp_Test_insert",connectionObj);

DataTable dt =
new DataTable();

dt.Columns.Add("name",typeof(string));

dt.Columns.Add("age", typeof(int));

dt.Columns.Add("Address", typeof(string));

DataRow dr =
dt.NewRow();

dr["name"] = "张三";

dr["age"] = 22;

dr["Address"] = "河北";

dt.Rows.Add(dr);

DataRow dr2 =
dt.NewRow();

dr2["name"] = "李四";

dr2["age"] = 33;

dr2["Address"] = "北京";

dt.Rows.Add(dr2);

try

{

connectionObj.Open(); //连接打开

/*创建SqlCommand等进行数据库操作*/

sqlcom.CommandType = CommandType.StoredProcedure;

SqlParameter sp = new SqlParameter("@execelDT",
SqlDbType.Structured);//表值类型要用Structured

sp.Value = dt;

sqlcom.Parameters.Add(sp);

int index=sqlcom.ExecuteNonQuery();

if (index>0)

{

Console.WriteLine("插入成功!");

}

connectionObj.Close();//连接关闭

}

catch
(Exception ex)

{

throw;

}

Console.ReadKey();

}

--------------------------------------------总结---------------------------------------------------

表类型最大的方便是可以由DataTable直接以变量形式传入数据库。

简化了操作大量数据到数据时复杂的分布设计。

注意:表类型中的列名称和DataTable中的列名称可以不一致(但是不建议这样做),但是列的顺序和变量类别必须一致。

用sql server profiler监视请求会发现,他只是将dataTable中的数据转换成insert语句插入到表类型中,所以与名称无关。

sql.表值类型的更多相关文章

  1. SQL表值函数和标量值函数的区别

    SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...

  2. PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)

    将字符串分割为表表经常用到,这里 SQL表值函数与CLR  表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...

  3. SQL SERVER类型与C#类型对照

      SQL SERVER类型   C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数 ...

  4. 标准的SQL语句类型

    标准的SQL语句类型 1.查询语句:主要是由select关键字完成 2.事务控制语句:主要由commit.rollback和savepoint三个关键字完成 3.DML(数据操作语言)语句:主要由in ...

  5. PL/SQL复合类型

    一.PL/SQL记录:一条记录. 可简化单行多列的数据的处理.当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量. 1.当使用自定义的 ...

  6. java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串

    package com.oop.util; import java.text.*; import java.util.UUID; import org.junit.Test; /* * 与日期相关的工 ...

  7. SQL注入类型

    本文转自:https://www.cnblogs.com/cui0x01/p/6322826.html Sql注入_类型 1.sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询 ...

  8. SQL注入 (1) SQL注入类型介绍

    SQL注入 SQL注入介绍与分类 1. 什么是sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2. sql注入类型 按照注入 ...

  9. pl/sql属性类型

    pl/sql 属性类型 %TYPE - 引用变量和数据库列的数据类型 %ROWTYPE - 提供表示表中一行的记录类型 显示输出scott.emp表中的部分数据 declare emp_number ...

随机推荐

  1. 题解 洛谷 P3332

    题目描述 权值线段树套线段树板子题 首先观察题目,判断为二维偏序问题 操作1为区间修改,所以一定是外部线段树维护权值,内部线段树维护所在区间,否则时间复杂度爆炸qwq 为方便查找,哈希时我采用哈希每个 ...

  2. CSS3动画旋转——(图片360°旋转)

    今天在重构网页特效的时候,想着用到一个css3的旋转特效.简单来一个demo. html <div class="box"> <img src="./y ...

  3. 虚拟化技术之kvm虚拟机创建工具virt-install

    在前边的博客中,我们创建KVM虚拟机用到了virt-manager,这个工具是一个图形化工具,创建虚拟机很方便:除此我们还是用virsh define/create +虚拟机配置文件来创建虚拟机,这种 ...

  4. python 03 常用操作符

    1. e记法,科学计数法. AeB   A,B为整数,A*10的B次方. 2. 逻辑运算,真为1,假为0,最好不使用这个计算 true(1)    false(0) true+true=2 3.类型转 ...

  5. Gitlab-CI/CD 1

    Gitlab-Runner自动构建服务器搭建1 这里讲到的gitlab仓库指的是https://gitlab.com/,自建gitlab仓库也基本相同. 项目的构建打包过程相对比较消耗系统性能,所以g ...

  6. Linux进程管理与性能监控

    1. 进程管理工具 这一节我们介绍进程管理工具: 使用进程管理工具,我们可以查询程序当前的运行状态,或终止一个进程: 任何进程都与文件关联:我们会用到lsof工具(list opened files) ...

  7. TS流解码过程-ES-PES-PTS-DTS

    转载自http://blog.chinaunix.net/uid-9688646-id-1998407.html TS 流解码过程: 1. 获取TS中的PAT 2. 获取TS中的PMT 3. 根据PM ...

  8. Jmeter 常用函数(10)- 详解 __threadNum

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.html 作用 返回当前线程组产生的线程的线程编号 语 ...

  9. Java 添加条码、二维码到PDF文档

    本文介绍如何通过Java程序在PDF文档中添加条码和二维码.创建条码时,可创建多种不同类型的条码,包括Codebar.Code11.Code128A.Code128B.Code32.Code39.Co ...

  10. Vector-based navigation using grid-like representations in artificial agents

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Nature May 17, 2018 Received: 5 July 2017; Accepted: 3 April 2018;Pub ...