zoukankan      html  css  js  c++  java
  • Sql自定义表类型批量导入数据

    -- 创建自定义表类型

    CREATE TYPE [dbo].[App_ProductTable] AS TABLE(
    	[p_name] [varchar](50) NOT NULL,
    	[p_audio] [varchar](255) NOT NULL,
    	[p_video] [varchar](255) NOT NULL
    )
    GO
    

    --在存储过程中使用自定义表类型

    ALTER PROCEDURE [dbo].[sp_import_app_product](
    	@pDT dbo.App_ProductTable READONLY,
    	@result INT OUTPUT
    )
    AS
    BEGIN
    	BEGIN TRAN
    	UPDATE a SET 
    	a.p_audio=b.p_audio,
    	a.p_video=b.p_video
    	FROM App_Product AS a 
    	JOIN @pDT AS b 
    	ON a.p_name=b.p_name
    	IF @@ERROR<>0
    	BEGIN
    		ROLLBACK TRAN
    		SET @result=-1
    	END
    	ELSE
    	BEGIN
    		COMMIT TRAN
    		SET @result=1
    	END
    END
    

    --C#中代码

    /// <summary>
    /// 批量更新产品信息,批量导入,最好使用 DataTable 数据源
    /// </summary>
    /// <param name="dt"></param>
    /// <returns></returns>
    public static int BatchUpdateProductImport(DataTable dt)
    {
                SqlParameter[] param ={
                    new SqlParameter("@pDT",SqlDbType.Structured),//需要指定此类型
                    new SqlParameter("@result",SqlDbType.Int)
                };
                param[0].Value = dt;
                param[0].TypeName = "dbo.App_ProductTable";
                param[1].Direction = ParameterDirection.Output;
                adsql.SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conStr"].ConnectionString, CommandType.StoredProcedure, "sp_import_app_product", param);
                return Convert.ToInt32(param[1].Value);
    }
    

    -- 直接使用自定义表类型

    DECLARE @c App_ProductTable
    INSERT INTO @c(p_audio,p_video,p_name) VALUES('/audio/1.mp3','/video/2.mp4','Xizhang')
    SELECT * FROM @c
    

    注:在服务端会有一个定义临时变量的过程,然后把所有的数据插入到这个变量中去,然后再执行存储过程的逻辑。

    1. 客户端是否一定用DataTable类型
    推荐使用DataTable类型,但也可以使用其他的类型,例如DataReader的数据流。

    2. DataTable的 字段名称 是否要匹配
    不一定要匹配,只要顺序一致,类型一样就可以了。

  • 相关阅读:
    身份证验证(c#和js)
    获取焦点问题
    关于加载设计器遇到一个或多个错误问题的解决方案
    关于如何使用自定义的结束消息循环的方式 (转载)
    多种重要源码下载
    关于线程同步(转载)
    ArrayList的使用技巧
    一些所谓有利于家庭生活的优点
    080801 30℃
    080731 31℃
  • 原文地址:https://www.cnblogs.com/xsj1989/p/5217162.html
Copyright © 2011-2022 走看看