表值类型是在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. Oracle用户授权

    一.用户授权 1)普通权限 grant ${autoType1, autoType2, autoType3, ...} to ${userName} identified by ${password} ...

  2. 关于 JavaScript 字符串的一个小知识

    说起字符串,我们再熟悉不过了.接触编程的第一个经典任务就是输出字符串:Hello, world.但是你知道 JavaScript 字符串在计算机里是怎么表示的吗? 最简单直观但不太准确的的理解就是,字 ...

  3. 【CQOI2018】异或序列 - 莫队

    题目描述 已知一个长度为n的整数数列 $a_1,a_2,...,a_n$​,给定查询参数l.r,问在 $a_l,a_{l+1},...,a_r$​ 区间内,有多少子序列满足异或和等于k.也就是说,对于 ...

  4. JavaScript学习系列博客_18_JavaScript中的匿名函数

    匿名函数 - 用函数声明的方式创建一个函数时,不加函数名称. function sum(){ console.log("我是函数sum")} - 不加名称,这样写浏览器是会报错的. ...

  5. 归并排序-Python实现

    归并排序(MergeSort) 归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 O(n\log n)(大O符号).1945年由约翰·冯·诺 ...

  6. 常见的mysql查询命令

    LIMIT基本语法:如果只给定一个参数,表示记录数.mysql> SELECT * FROM orange LIMIT 5; //检索前5条记录(1-5)相当于mysql> SELECT ...

  7. Java并发必知必会第三弹:用积木讲解ABA原理

    Java并发必知必会第三弹:用积木讲解ABA原理 可落地的 Spring Cloud项目:PassJava 本篇主要内容如下 一.背景 上一节我们讲了程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单? ...

  8. 使用xShell 连接 docker 使用说明

    方式一:当不知道docker里镜像的root密码的时候 1.从Docker Hub下载需要的镜像 docker pull 镜像名字 2.使用docker run命令启动容器 docker run -i ...

  9. Java中的 "==" 和 "equals" 区别

    分析 "==" 和 "equals" 区别的时候先了解一下Java的内存. Java内存 “==” 和  “equals” 区别” “==”: “==”比较的是 ...

  10. nginx配置过程中出现的问题

    在安装nginx时我们先创建用户useradd -s /sbin/nologin -M nginx 不然会报nginx: [emerg] getpwnam("nginx") fai ...