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


    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 

  • 相关阅读:
    线性回归(Linear Regression)的理解及原理
    3个模型搞清楚用户留存分析
    机器学习简单介绍
    数据分析经典方法:5W2H分析法
    使用guava RateLimiter限流
    Maven之assembly自定义打包
    IDE自动编译
    神奇的$scope
    二分法查找
    深入理解CSS选择器优先级
  • 原文地址:https://www.cnblogs.com/zhxhdean/p/3220732.html
Copyright © 2020-2023  润新知