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 ...
随机推荐
- add application window with unknown token XXX Unable to add window;is your activity is running?
报错: Attempted to add application window with unknown token XXX Unable to add window——token android.o ...
- 使用IDEA新建基于SpringBoot的Web项目(超详细)
目前java的开发很多Learner都慢慢的学习使用IDEA这款工具,个人觉得其实相比Eclipse来说差不多,个人习惯的问题,但是我还是推荐IDEA这款工具.虽然它目前是收费的,但相信网上的各种破解 ...
- JVM对象分配
1.JVM中执行字节码new指令时: 1.1.分配内存 分配策略有两种方式:(1)指针碰撞 当JVM内存区域是连续的规整的,所有用过的内存都放在一边,空闲的内存都放在另外一边,中间放着 指针作为分界点 ...
- centos7下的redis集群模式
1.先安装好单机版的redis 2.Reids安装包里有个集群工具,要复制到/usr/local/bin里去 cd /home/redis/redis-4.0./src ls - cp redis-t ...
- Fairseq-快速可扩展的序列建模工具包
一种快速.可扩展的序列建模工具包,Pytorch的高级封装库,适用于机器翻译.语言模型和篇章总结等建模任务. 抽象 Dataset:数据加载 Fairseq中的Dataset基本都是按功能逐层封装,按 ...
- 如何寻找决策最优解?熵权TOPSIS助你科学决策
熵权topsis是一种融合了熵值法与TOPSIS法的综合评价方法.熵值法是一种客观赋值法,可以减少主观赋值带来的偏差:而topsis法是一种常见的多目标决策分析方法,适用于多方案.多对象的对比研究,从 ...
- Git-commit-中添加表情
git commit 中使用表情 我们经常可以在github上看到国外大佬的commit信息中有很多可爱的表情,这是怎么做到的呢? ok,可以这样使用哦:git commit -m '提交信息 :em ...
- mysql8.0的下载、安装、可视化软件(下载、安装、破解)
获取下面相关资源,请关注微信公众号“带你做毕设或者添加小编微信,有不明白的联系小编,可以提供远程帮助哦 mysql压缩版最新版本下载地址https://dev.mysql.com/downloads/ ...
- 2020,8种必备Selenium编写自动化用例的技巧
在开始自动化时,您可能会遇到各种可能包含在自动化代码中的方法,技术,框架和工具.有时,与提供更好的灵活性或解决问题的更好方法相比,这种多功能性导致代码更加复杂.在编写自动化代码时,重要的是我们能够清楚 ...
- 基于Rust-vmm实现Kubernetes运行时
随着容器及K8s的广泛使用,越来越多的容器安全与隔离问题被暴露出来,如:容器逃逸.水平攻击.DDos攻击等严重威胁了办公和生产环境的安全与稳定,影响了业务的正常运行.安全容器技术孕育而生,产生了kat ...