无需开发应用:如何通过SQL管理器将本地文件导入Azure SQL数据库?
没错,BULK INSERT确实是从SQL服务器本身的文件系统读取数据,所以你本地的路径它肯定找不到——这也是Azure SQL的安全限制导致的,毕竟你没法直接访问云服务器的本地存储。不用开发小应用的话,有几个现成的工具和方法可以搞定这个需求,我给你列几个最实用的:
方法1:用SQL Server Management Studio (SSMS) 导入导出向导
这是最直观的图形化方法,适合新手操作:
- 打开SSMS,连接到你的Azure SQL数据库
- 右键点击目标数据库,选择「任务」→「导入数据」,启动导入向导
- 在「数据源」下拉菜单里选「平面文件源」,点击「浏览」选择你本地的
trouwpartij.txt文件 - 进入「平面文件源」设置页面,配置分隔符:字段分隔符填
|,行分隔符填|\n,同时可以预览数据确认格式是否匹配 - 下一步选择目标为「SQL Server Native Client 11.0」(或对应版本),输入Azure SQL的服务器信息、认证方式和目标数据库
- 后续步骤可选择直接导入到现有表
gifts,或者创建新表;最后点击「完成」启动导入即可
方法2:用Azure Data Studio (ADS) 导入数据
ADS是微软的轻量数据库工具,操作简洁:
- 打开ADS,连接到你的Azure SQL数据库
- 在左侧「服务器」面板找到目标数据库,右键点击选择「导入数据」
- 选择「本地文件」作为数据源,找到你的
trouwpartij.txt后点击「下一步」 - 配置文件格式:选择「分隔符」,字段分隔符填
|,行分隔符填|\n,预览数据无误后继续 - 选择目标表(可直接选已有的
gifts),确认列映射正确,最后点击「导入」完成操作
方法3:用bcp命令行工具
如果习惯用命令行,bcp是官方的批量复制工具,无需编写代码:
打开本地的CMD或者PowerShell,运行类似这样的命令(替换成你的实际信息):
bcp YourDatabaseName.dbo.gifts in "C:\temp\trouwpartij.txt" -S your-azure-sql-server-name.database.windows.net -U your-username -P your-password -c -t " |" -r " |\n"
参数解释:
-c:使用字符模式导入,适配文本文件-t:指定字段分隔符,对应你文件里的|-r:指定行分隔符,对应|\n-S:Azure SQL服务器的完整名称-U和-P:你的数据库认证用户名和密码
方法4:借助Azure Blob Storage导入(适合大文件/重复导入)
如果文件体积较大,或者需要多次导入,可先把文件传到Blob存储,再从云存储导入:
- 用Azure Portal或者Azure Storage Explorer,把本地的
trouwpartij.txt上传到一个Azure Blob容器(记得设置容器访问权限为「Blob」或「容器」,方便SQL访问) - 在Azure SQL里执行以下步骤(替换你的Blob信息):
- 创建数据库主密钥(若未创建):
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YourStrongPassword123'; - 创建数据库范围的凭据,指向你的Blob存储:
CREATE DATABASE SCOPED CREDENTIAL BlobCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'YourBlobSASKey'; - 创建外部数据源指向Blob容器:
CREATE EXTERNAL DATA SOURCE BlobDataSource WITH ( TYPE = BLOB_STORAGE, LOCATION = 'https://your-storage-account.blob.core.windows.net/your-container-name', CREDENTIAL = BlobCredential ); - 用
BULK INSERT从Blob读取数据:BULK INSERT gifts FROM 'trouwpartij.txt' WITH ( DATA_SOURCE = 'BlobDataSource', FIELDTERMINATOR = ' |', ROWTERMINATOR = ' |\n' );
- 创建数据库主密钥(若未创建):
内容的提问来源于stack exchange,提问作者BrilBroeder
相关产品推荐
相关产品推荐

