1. 程式人生 > >SQL表值參數批量插入

SQL表值參數批量插入

asi exist bject light 定義 idf func val 參數

--使用表值參數向另一數據表中批量插入數據

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表值參數批量插入