您的位置:首页 > 数据库

[原创]Sql2008 使用TVP批量插入数据

2013-07-28 10:04 295 查看
TVP(全称 :Table-Valued Parameter)

叫做表值参数(Table-Valued Parameter)是SQL2008的一个新特性。顾名思义,表值参数表示你可以把一个表类型作为参数传递到函数或存储过程里。

实例讲解:

第一步:创建一个Type类型和写入数据的原始表结构相同

CREATE TYPE [dbo].[TestTVP] AS TABLE(
[TID] [bigint] NOT NULL,
[DepID] [nvarchar](100) NOT NULL,
[DepName] [nvarchar](512) NOT NULL,
[DataChange_CreateTime] [datetime] NOT NULL,
[DataChange_LastTime] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(
[TID] ASC
)WITH (IGNORE_DUP_KEY = OFF)
)
GO


第二步:创建存储过程

CREATE PROCEDURE [dbo].[SP_TestTVP_I]
(
@TestTVP TestTVP READONLY
)
AS
DECLARE @retcode int, @rowcount int
SET LOCK_TIMEOUT 1000
SET NOCOUNT ON

INSERT INTO 原始表名(列)
SELECT 表参数列
FROM @TestTVP


第三步:C#代码使用

//需要构建Table数据或者从表中查询的数据返回到Table

SqlConnection connection = new SqlConnection("");
SqlCommand command = new SqlCommand();
command.Connection = connection;
connection.Open();
command.CommandText = "[dbo].[SP_TestTVP_I]";
command.CommandType = CommandType.StoredProcedure;
SqlParameter tvpParam = command.Parameters.AddWithValue("@TestTVP", insertTab);
tvpParam.SqlDbType = SqlDbType.Structured;
command.ExecuteNonQuery();
command.Parameters.Clear();
connection.Close();


结束。。。

其他批量Insert,update,delete脚本SQL

insert into select * from table

update tab1 set tab1.col=tab2.col2 from tab1,tab2 where tab1.colA=tab2.colB

update tab1 set tab1.col=tab2.col2 from tab1 join tab2 on tab1.colA=tab2.colB

delete from t1 from t1,t2 where t1.id=t2.id

delete from t1 from t1 inner join t2 on t1.id = t2.tid
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: