• 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的 字段名称 是否要匹配
    不一定要匹配,只要顺序一致,类型一样就可以了。

  • 相关阅读:
    Entity Framework 连接低版本数据库
    Validate Disk Failover Failed
    Unable to create Azure Mobile Service: Error 500
    查看Visual Studio异常内容
    RDLC An unexpected error occurred while compiling expressions. Native compiler return value: '-1073741511'
    Redis 64 steps
    IQueryable join 的问题
    jquery 通知页面变化
    jquery 让滚动条处于div底部
    SSIS 文件系统任务无法使用变量配置目标路径
  • 原文地址:https://www.cnblogs.com/xsj1989/p/5217162.html
Copyright © 2020-2023  润新知