【问题标题】:Error while creating External File Format in Azure SQL Database在 Azure SQL 数据库中创建外部文件格式时出错
【发布时间】:2021-05-13 07:44:31
【问题描述】:

使用以下命令在 Azure SQL DB 中创建外部文件格式时出现错误“'EXTERNAL'附近的语法不正确”(使用 Microsoft Docs 链接中的 T-SQL 语法 - https://docs.microsoft.com/en-us/sql/t-sql/statements/create-external-file-format-transact-sql?view=sql-server-ver15&tabs=delimited)但仍然出现语法错误:

--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)
)

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

【问题讨论】:

  • 你能运行select @@version并发布结果吗?
  • Azure SQL DB 支持 CREATE EXTERNAL DATA SOURCE 而不是 FILE FORMAT,如果这就是您正在处理的问题。 Azure Synapse Analytics 和托管实例支持DATA SOURCE
  • @wBob SQL Server 版本的输出:“Microsoft SQL Azure (RTM) - 12.0.2000.8 Oct 1 2020 18:48:35 版权所有 (C) 2019 Microsoft Corporation”
  • @wBob 我也在 Azure SQL 托管实例上运行相同的查询,但它也显示相同的错误。
  • 如前所述,该语句在该版本建议的 Azure SQL DB 中不起作用。如果您在 master 数据库中,您也会得到这个。切换到适当的数据库。 Synapse 的@@version 响应当前为Microsoft Azure SQL Data Warehouse - 10.0.15554.0 Dec 10 2020 03:11:10 Copyright (c) Microsoft Corporation

标签: sql-server tsql azure-sql-database azure-sql-server-managed-instance


【解决方案1】:

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

  1. 检查 SAS 密钥是否已过期。请检查允许的权限

  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

【讨论】:

  • 此方法不适用于镶木地板格式。执行 BULK INSERT 时出现错误。
猜你喜欢
  • 2020-09-20
  • 2020-07-03
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 2020-06-16
  • 2017-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多