表值类型是在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语句插入到表类型中,所以与名称无关。

最新文章

  1. <a>标签跳转传值。
  2. [Android Tips] 8. Install apk on multiple connected devices
  3. Qt 5.3.1 版本应用程序的发布问题
  4. DevExpress GridControl使用方法总结
  5. Swift 设计指南之 编程规范
  6. Unity3D中定时器的使用
  7. 集成 Tomcat 插件到 Eclipse 的过程
  8. C语言中的volatile
  9. C# DataGridView 导出 Excel(根据Excel版本显示选择不同后缀格式xls或xlsx)
  10. [转] add-apt-repository
  11. js静态方法
  12. TCP/IP详解之:SNMP
  13. JAVA基础--代理模式
  14. 星级评分条(RatingBar)的功能和用法
  15. 修改windows7中文件的权限
  16. 利用Express和ejs编写简单页面
  17. 华南理工大学“三七互娱杯”程序设计竞赛(重现赛)( HRY and array 高精度除法模板)
  18. (办公)json报错的解决问题的小经验.
  19. 查看memcached连接数
  20. 转载-Mac下面的SecureCRT(附破解方案) 更新到最新的8.0.2

热门文章

  1. 5年Java程序员,五面蚂蚁险拿offer定级P7,大厂面试不过如此?
  2. 第二篇 Scrum冲刺博客
  3. computed&watch
  4. JacaScript实现call apply bind函数
  5. Hello-Annie
  6. SQL分组排序后取每组最新一条数据的另一种思路
  7. 数据处理 | pandas入门专题——离散化与one-hot
  8. OpenSIPS 2.4.2 高并发下,日志丢失怎么办
  9. vue 使用 sass 或者 less ( vue-cli 3 )
  10. Forward Rendering VS Deferred Rendering