在 Azure SQL 数据库中创建外部文件格式时出错

问题描述

使用以下命令在 Azure sql DB 中创建外部文件格式时出现错误 “'EXTERNAL' 附近的语法不正确”(使用 Microsoft Docs 链接中的 T-sql 语法 - {{3} }) 但仍然出现语法错误

--Example 1
CREATE EXTERNAL FILE FORMAT textdelimited1 
WITH ( FORMAT_TYPE = DELIMITEDTEXT,FORMAT_OPTIONS ( FIELD_TERMINATOR = '|')
GO

--Example 2
CREATE EXTERNAL FILE FORMAT skipHeader_CSV
WITH (FORMAT_TYPE = DELIMITEDTEXT,FORMAT_OPTIONS(
          FIELD_TERMINATOR = ',',STRING_DELIMITER = '"',FirsT_ROW = 2,USE_TYPE_DEFAULT = True)
)

https://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-file-format-transact-sql?view=sql-server-ver15&tabs=delimited

enter image description here

请帮我解决这个问题。 提前致谢

解决方法

正如@wBob 提到的,因为 Azure SQL DB 和 MI 不支持外部文件格式。我们可以使用 EXTERNAL DATA SOURCE。这个问题的原因有很多(无法批量加载,因为...无法打开)。

  1. 检查 SAS 密钥是否已过期。并请检查允许的权限enter image description here

  2. 您在创建 SECRET 时是否删除了问号

CREATE DATABASE SCOPED CREDENTIAL UploadInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',SECRET = 'sv=2019-12-12******2FspTCY%3D'

我已经尝试了以下测试,效果很好。

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '***';
go

CREATE DATABASE SCOPED CREDENTIAL UploadInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',SECRET = 'sv=2019-12-12&ss=bfqt&srt=sco&sp******%2FspTCY%3D'; -- dl


CREATE EXTERNAL DATA SOURCE MyAzureInvoices
    WITH (
        TYPE = BLOB_STORAGE,LOCATION = 'https://***.blob.core.windows.net/<container_name>',CREDENTIAL = UploadInvoices
    );

BULK INSERT production.customer
FROM 'bs140513_032310-demo.csv'
WITH
    (
        DATA_SOURCE = 'MyAzureInvoices',FORMAT = 'CSV',FIRSTROW = 2
    )
GO