SQL表值参数批量插入

Posted Miss.Bueno

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL表值参数批量插入相关的知识,希望对你有一定的参考价值。

--使用表值参数向另一数据表中批量插入数据

USE DF17DataPro
--创建并使用表值参数步骤
/*
1.创建表类型并定义表结构。
有关如何创建 SQL Server 类型的信息,请参阅用户定义表类型。有关如何定义表结构的详细信息,请参阅 CREATE TABLE (Transact-SQL)。
2.声明具有表类型参数的例程。有关 SQL Server 例程的详细信息,请参阅 CREATE PROCEDURE (Transact-SQL) 和 CREATE FUNCTION (Transact-SQL)。
3.声明表类型变量,并引用该表类型。有关如何声明变量的信息,请参阅 DECLARE @local_variable (Transact-SQL)。
4.使用 INSERT 语句填充表变量。有关如何插入数据的详细信息,请参阅使用 INSERT 和 SELECT 添加行。
5.创建并填充表变量后,可以将该变量传递给例程。
*/

--具体实现
-------------------------------------------------------------
--1.创建表值参数类型BulkValue

IF EXISTS (SELECT * FROM SYS.TYPES st 
JOIN SYS.SCHEMAS ss 
ON st.SCHEMA_ID=ss.SCHEMA_ID
WHERE st.name=N[BulkValue] AND ss.name=Ndbo
)
DROP TYPE [dbo].[BulkValue]
GO

CREATE TYPE BulkValue AS TABLE 
( 
IDFlag INT , --主键ID
RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据
AA INT NOT NULL,
CA INT NULL, 
FlightID Varchar(10) NULL, --航班号
)

 

-------------------------------------------------------------
--(2)声明具有表类型参数的存储过程
-------------------------------------------------------------

IF exists (SELECT * FROM SYS.PROCEDURES WHERE OBJECT_ID = OBJECT_ID(N[dbo].[InsertDBBulkProc]))
DROP PROC [dbo].InsertDBBulkProc
go 
-- 创建一个过程来获得该表值参数数据 
CREATE PROCEDURE InsertDBBulkProc 
@TVP BulkValue READONLY
AS 
SET NOCOUNT ON
INSERT INTO BasicMsg (RecvTime,AA,CA,FlightID )
SELECT RecvTime,AA,CA,FlightID
FROM @TVP;
GO

-------------------------------------------------------------
--(3) 声明一个变量来引用该类型
-------------------------------------------------------------

DECLARE @LocationTVP 
AS BulkValue ;

-------------------------------------------------------------
--(4) 将数据加入变量中
-------------------------------------------------------------

INSERT INTO @LocationTVP (RecvTime,AA,CA,FlightID)
SELECT RecvTime,AA,CA,FlightID
FROM 
[dbo].[BasicMsg20170518];

 

其中,BasicMsg20170518为源数据表。

-------------------------------------------------------------
--(5) 把表变量的数据传递给存储过程
-------------------------------------------------------------

EXEC InsertDBBulkProc @LocationTVP;
GO

 




















以上是关于SQL表值参数批量插入的主要内容,如果未能解决你的问题,请参考以下文章

SQL一次性插入大量数据

(转)SQL一次性插入大量数据

sql server 2008r2 向带有索引的表里大批量插入数据

SqlServer优化之批量插入(SqlBulkCopy表值参数)

SqlServer优化之批量插入(SqlBulkCopy表值参数)

百万级数据的批量插入的两种方法测试