Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  489 随笔 :: 0 文章 :: 417 评论 :: 70万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

  《Windows Azure Platform 系列文章目录

 

  本文介绍如何使用Azure Blob Storage,把本地Excel文件导入到Azure SQL MI

  在使用SQL MI的时候,通常会把本地Excel文件导入到Azure SQL MI,都会通过服务器路径进行上传,比如下面一句话:

INSERT INTO  dbo.orderdetails
select *,createtime=GETDATE()
from Openrowset('Microsoft.ACE.OLEDB.12.0',
                 'EXCEL 12.0;HDR=YES;User id=admin;Password=;IMEX=1;DATABASE=D:\order.xlsx',
                 'select * from [Sheet1$]')
WHERE [orderid] IS NOT NULL;

  但是我们在使用Azure SQL MI的时候,SQL MI并不知道C盘、D盘这些路径,这时候就需要把文件上传到Azure Blob Storage来进行导入操作

 

  主要步骤:

  第一步:Excel文件不能直接上传到SQL MI,必须转换为csv文件

  第二步:将CSV文件到Azure SQL MI数据表 (第一次导入CSV文件时需要,主要为了生成Format文件,后续有了Format文件就无需执行第二步,直接执行第四步通过T-SQL语句导入)

  第三步:需要通过bcp命令,导出数据表文件为Format文件 (第一次导入CSV文件时需要,主要为了生成Format文件,后续有了Format文件就无需执行第二步,直接执行第四步通过T-SQL语句导入)

  第四步:将CSV文件和Format上传到Azure Blob,并通过T-SQL语句导入

 

  接下来进入我们的演示步骤:

  第一步:Excel文件不能直接上传到SQL MI,必须转换为csv文件,步骤略。

 

  第二步:将CSV文件到Azure SQL MI数据表 (第一次导入CSV文件时需要,主要为了生成Format文件,后续有了Format文件就无需执行第二步,直接执行第四步通过T-SQL语句导入)

  1.我们打开SQL Server Management Studio,连接到SQL MI,步骤略。

  2.点击Database,右键点击TASK,Import Data,如下图:

  

  3.在Choose a Data Source窗口中,选择Flat File Source,然后点击Browse选择本地的CSV文件,进行上传

  

 

  4.在SQL Server Import and Export Wizard窗口中,我们点击Properties

  

  

  5.在弹出的窗口中,输入SQL MI登录的用户名、密码和需要导入的Database。如下图:

  

 

  6.下图中,点击Next

  

 

  7.下图中,点击Run Immediately

  

 

  8.查看导入进度,如下图:

  

 

  9.导入成功后,我们在SQL MI可以查看到已经导入成功的Table,如下图dbo.testcsv:

  

 

  第三步:需要通过bcp命令,导出数据表文件为Format文件 (第一次导入CSV文件时需要,主要为了生成Format文件,后续有了Format文件就无需执行第二步,直接执行第四步通过T-SQL语句导入)

  1.我们打开本地CMD命令行,输入

where bcp.exe

  

 

  2.cd进入到bcp.exe所在的目录,然后执行下面的命令:

bcp [dbname].[schema].[tablename] format nul -c -f [fmt文件本地路径] -t,  -U "[登录数据库的用户名]" -P "[登录数据库的密码]" -S "[SQLMI的DNS地址]"

  比如我们执行下面的脚本,把testcsv.fmt文件保存到本地的D盘,如下图

bcp [dbname].[schema].[tablename] format nul -c -f D:\testcsv.fmt -t,  -U "[登录数据库的用户名]" -P "[登录数据库的密码]" -S "[SQLMI的DNS地址]"

  执行完毕后,我们用记事本打开D盘的testcsv.fmt文件,如下图:

  这个format文件我们需要保留下来,后续可以在csv文件schema不变的情况下可以继续使用

  

 

 

  第四步:将CSV文件和Format上传到Azure Blob,并通过T-SQL语句导入

  1.我们把上面步骤中用到的testcsv.csv文件和testcsv.fmt文件,都上传到Azure Blob存储账户里,保存在container 名称为factory01

  注意需要把container属性设置为private,不允许匿名访问

  上传完毕后,全路径为:

  https://leisqlmi01storage.blob.core.chinacloudapi.cn/factory01/factory01.csv

  https://leisqlmi01storage.blob.core.chinacloudapi.cn/factory01/factory01.fmt

 

  2.点击Azure Blob存储账户,点击Container,点击Generate SAS Token and URL,然后复制SAS Token

  

 

 

  

  3.我们回到SQL Server Management Studio,打开需要访问的数据库,右键New Query,执行下面的脚本:

复制代码
--下面的password的秘钥内容,可以根据需要修改PASSWORD值
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '12345#KL95234nl0zBe';  

CREATE DATABASE SCOPED CREDENTIAL factory01
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '[这里是你在上面步骤复制的SAS Token]';


--设置设置External Data Source
CREATE EXTERNAL DATA SOURCE factory01Container
    WITH (
        TYPE = BLOB_STORAGE,
        LOCATION = 'https://leisqlmi01storage.blob.core.chinacloudapi.cn/factory01',
        CREDENTIAL = factory01
    );

--BULK 就是需要导入的CSV文件,已经保存到Azure Blob中
--Formatfile就是BCP命令导出的format文件
  SELECT * FROM OPENROWSET(
   BULK 'testcsv.csv',
   DATA_SOURCE = 'factory01Container',
   FORMAT = 'CSV',
   FORMATFILE='testcsv.fmt',
   FORMATFILE_DATA_SOURCE = 'factory01Container'
   ) AS DataFile;
复制代码

 

  这样就可以通过OPENROWSET,访问保存到Azure Blob中的CSV文件

 

  

posted on   Lei Zhang的博客  阅读(248)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
历史上的今天:
2019-10-12 Linux学习 (2) CentOS 6 虚拟机挂载磁盘
点击右上角即可分享
微信分享提示