You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用TSQL在Azure SQL Server中将数据写入Blob Storage?

将处理结果写入Azure Blob容器的TSQL实现方案

前提准备

确保你已经为目标Blob容器配置好以下对象(逻辑和读取时一致,仅指向目标容器):

  • 数据库范围凭据(Database Scoped Credential):用于授权访问目标Blob容器
  • 外部数据源(External Data Source):关联目标Blob容器的地址

未创建的话可以参考以下代码:

-- 创建数据库范围凭据(以SAS令牌为例)
CREATE DATABASE SCOPED CREDENTIAL [TargetBlobCredential]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '你的SAS令牌(注意不要开头的?)';

-- 创建指向目标Blob容器的外部数据源
CREATE EXTERNAL DATA SOURCE [TargetBlobDataSource]
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://你的存储账户名.blob.core.windows.net/目标容器名',
    CREDENTIAL = [TargetBlobCredential]
);

方法1:通过外部表写入Blob(推荐纯TSQL实现)

通过创建关联目标Blob的外部表,将处理结果插入表中即可自动同步到Blob容器。

步骤1:创建外部文件格式

根据输出文件类型(如CSV)定义格式:

CREATE EXTERNAL FILE FORMAT [CSVOutputFormat]
WITH (
    FORMAT_TYPE = DELIMITEDTEXT,
    FORMAT_OPTIONS (
        FIELD_TERMINATOR = ',',
        STRING_DELIMITER = '"',
        FIRST_ROW = 1, -- 设为1输出表头,设为2则跳过
        USE_TYPE_DEFAULT = ON
    )
);

步骤2:创建关联目标Blob的外部表

表结构需与处理结果集完全匹配:

CREATE EXTERNAL TABLE [dbo].[OutputExternalTable] (
    -- 示例列,替换为你的处理结果列
    ID INT,
    Name VARCHAR(100),
    ProcessedDate DATETIME
)
WITH (
    LOCATION = 'output_files/', -- 目标容器下的子路径,可选
    DATA_SOURCE = [TargetBlobDataSource],
    FILE_FORMAT = [CSVOutputFormat]
);

步骤3:插入处理结果到外部表

将处理后的数据(如临时表、查询结果)插入外部表,数据会自动写入Blob:

-- 假设处理结果存储在#ProcessedResult临时表中
INSERT INTO [dbo].[OutputExternalTable]
SELECT ID, Name, ProcessedDate FROM #ProcessedResult;

方法2:使用EXPORT语句(SQL Server 2022+/Azure SQL)

新版本SQL Server或Azure SQL支持直接用EXPORT语句导出查询结果到Blob:

EXPORT INTO
    'output_files/processed_result.csv' -- 目标Blob的完整文件路径
WITH (
    DATA_SOURCE = 'TargetBlobDataSource',
    FILE_FORMAT = 'CSVOutputFormat',
    REPLACE = ON -- 已存在同名文件时覆盖
)
AS
-- 替换为你的处理结果查询
SELECT ID, Name, ProcessedDate FROM #ProcessedResult;

方法3:通过bcp命令配合存储过程(传统SQL Server适用)

本地SQL Server可启用xp_cmdshell调用bcp命令导出:

-- 启用xp_cmdshell(若未开启)
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;

-- 构造bcp命令
DECLARE @bcpCommand NVARCHAR(1000);
SET @bcpCommand = 'bcp "SELECT ID, Name, ProcessedDate FROM YourDatabase.dbo.#ProcessedResult" queryout "https://你的存储账户名.blob.core.windows.net/目标容器名/output.csv" -S localhost -d YourDatabase -U 用户名 -P 密码 -c -t, -r\n -C RAW';

-- 执行导出命令
EXEC xp_cmdshell @bcpCommand;

注:也可在Blob路径后拼接SAS令牌来授权,无需指定数据库用户名密码。

注意事项

  • 确保数据库范围凭据拥有目标Blob容器的写入权限(SAS令牌需包含w权限)
  • 外部表会自动拆分生成多个文件(按数据量/分区),EXPORT语句可指定单个文件名
  • 若需覆盖已有文件,可删除外部表重建,或使用EXPORT的REPLACE选项

内容的提问来源于stack exchange,提问作者iProgram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 16:51:15