zoukankan      html  css  js  c++  java
  • 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
    只此一生,与子白头
  • 相关阅读:
    模块化、结构化的代码,何尝不是在讲人生
    DOS操作文件或文件夹
    OSQL
    DOS 命令大全
    Red Tea
    SetInterval_1
    SetInterval
    分库分表——Sharding-Sphere
    线上redis热key问题
    线上redis bgsave导致服务响应延迟
  • 原文地址:https://www.cnblogs.com/Miss-Bueno/p/7061948.html
Copyright © 2011-2022 走看看