sql.表值类型
表值类型是在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.表值类型的更多相关文章
- SQL表值函数和标量值函数的区别
SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...
- PCB MS SQL表值函数与CLR 表值函数 (例:字符串分割转表)
将字符串分割为表表经常用到,这里 SQL表值函数与CLR 表值函数,两种实现方法例出来如下: SELECT * FROM FP_EMSDB_PUB.dbo.SqlSplit('/','1oz/1.5 ...
- SQL SERVER类型与C#类型对照
SQL SERVER类型 C#类型 精确数字 bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数 ...
- 标准的SQL语句类型
标准的SQL语句类型 1.查询语句:主要是由select关键字完成 2.事务控制语句:主要由commit.rollback和savepoint三个关键字完成 3.DML(数据操作语言)语句:主要由in ...
- PL/SQL复合类型
一.PL/SQL记录:一条记录. 可简化单行多列的数据的处理.当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量. 1.当使用自定义的 ...
- java 与日期转换相关的方法(java.util.date类型和java.sql.date类型互相转换)、随机字符串生成方法、UUID生产随机字符串
package com.oop.util; import java.text.*; import java.util.UUID; import org.junit.Test; /* * 与日期相关的工 ...
- SQL注入类型
本文转自:https://www.cnblogs.com/cui0x01/p/6322826.html Sql注入_类型 1.sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询 ...
- SQL注入 (1) SQL注入类型介绍
SQL注入 SQL注入介绍与分类 1. 什么是sql注入 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 2. sql注入类型 按照注入 ...
- pl/sql属性类型
pl/sql 属性类型 %TYPE - 引用变量和数据库列的数据类型 %ROWTYPE - 提供表示表中一行的记录类型 显示输出scott.emp表中的部分数据 declare emp_number ...
随机推荐
- Java引用类型之最终引用
FinalReference类只有一个子类Finalizer,并且Finalizer由关键字final修饰,所以无法继承扩展.类的定义如下: class FinalReference<T> ...
- 输入url后的加载过程~
1)查找域名对应的IP地址: 2)建立连接(TCP的三次握手): 3)构建网页: 4)断开连接(TCP的四次挥手): TCP的三次握手:为了准确无误的把数据送到目标处,TCP协议采用了三次握手策略,用 ...
- Jmeter系列(50)- 详解 If 控制器
如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 简单介绍 可以通过条件来控制是否运行其 ...
- golang ctrie demo
下载ctrie: go get -t github.com/Workiva/go-datastructures/trie/ctrie 测试demo1: package main import ( &q ...
- Linux环境下没有权限操作文件或目录
linux下有超级用户(root)和普通用户,普通用户不能直接操作没有权限的目录,如果出现了没有权限的提示,可以尝试用su命令解决. 比如: #mkdir aaa 我要创建一个aaa的文件夹,没有操作 ...
- Python2.7.8 setuptools 下载及安装方法
Python2.7.8 setuptools 下载及安装方法 电脑配置:联想笔记本电脑 windows8系统 Python版本:2.7.8 本文章撰写时间:2014.12.11 作者:陈东陈 阅读说 ...
- MS建模mmt
一.流程:1.定义好每个原子力场类型:Edit Sets(分组) 2.加H(一般是仅与Al-O八面体中的Al相连的O原子).给H分组 3.“make P1”.校核化学式(正确与否) 4.扩成超晶胞(N ...
- 7. Jackson用树模型处理JSON是必备技能,不信你看
每棵大树,都曾只是一粒种子.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习.关注公众号[BA ...
- 在使用postman中操作api接口测试403解决方法
在向Jenkins发送请求时收到了这样的403错误信息: No valid crumb was included in the request 后来通过google找到了解决方案. http://st ...
- Windows servers 2008 环境下,CA证书服务器搭建。
CA证书这个东西好像是很久之前的东西了,现在已经不大用了,不过还是作为一种服务,搭建一下. 环境:Windows servers 2008 (虚拟机环境) 1.配置IP地址. 2.添加角色. 选择Ac ...