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=N'dbo'
)
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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM