SQLServer存储同步本地Execl到数据库

上存储

SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
--将读取文件导入数据库
CREATE procedure PROC_GDCRMA_ImportData
@SavePath VARCHAR(200) = '',--文件保存的路径
@FilePath VARCHAR(500) = ''--文件
AS BEGIN

    DECLARE @delCmd VARCHAR(5000) = 'del ' + @SavePath + 'G.xlsx'
    SELECT @delCmd
    EXEC xp_cmdshell @delCmd

    DECLARE @copyCmd VARCHAR(5000) = 'copy "' + @FilePath + '" ' + @SavePath + 'G2.xlsx'
    SELECT @copyCmd
    EXEC xp_cmdshell @copyCmd

    DECLARE @file VARCHAR(200)
    SET @file = @SavePath + 'G2.xlsx'
    SELECT @file
    
    DECLARE @sql VARCHAR(8000)
    SET @sql = N'
        INSERT INTO dbo.Test(
        Name,CreateDate)
        SELECT [Name Code],CONVERT(VARCHAR(50),GETDATE(),25)
        FROM OPENDATASOURCE(''Microsoft.ACE.OLEDB.12.0'', ''Data Source="'+ @file +'";Extended Properties=''''Excel 12.0 XML;HDR=YES; IMEX=1'''''')...GDC$
    ';

    EXEC (@sql);

    exec xp_cmdshell 'ren D:\Syn\Data\DellExecl\GDC\G2.xlsx "G.xlsx"'

       
end
GO

 

注:

1.这里执行存储的时候,可能需要注意对应路径下是否有文件【G.xlsx】和【G2.xlsx】,不然会提示是找不到导致执行不下去

2.执行对应目录的文件夹权限要打开,以及Execl文件不要运行不然汇报错误代码

3.记得安装【Microsoft.ACE.OLEDB.12.0】

 

4.Execl的表头列名有长度限制的(查了下,截取到了64位--可能我的系统是64的,32的不知道)

5.注意数据字段长度,好像过长的变成NText类型了

 

posted @ 2022-08-08 15:35  蜗牛的礼物  阅读(44)  评论(0编辑  收藏  举报