文档中显示的 sql 代码未在 azure synapse 专用 sql 池上运行

Posted

技术标签:

【中文标题】文档中显示的 sql 代码未在 azure synapse 专用 sql 池上运行【英文标题】:The sql codes shown in the document is not running on azure synapse dedicate sql pool 【发布时间】:2021-09-19 04:55:39 【问题描述】:

我有以下link

当我复制粘贴以下语法时

-- Create DimProductCategory PK
ALTER TABLE [dbo].[DimProductCategory] WITH CHECK ADD 
    CONSTRAINT [PK_DimProductCategory_ProductCategoryKey] PRIMARY KEY CLUSTERED 
    (
        [ProductCategoryKey]
    )  ON [PRIMARY];
GO

语法WITH CHECK ADD 不起作用。此外,文档中的许多语法都不起作用,想知道为什么它不适用于 sql pool。 azure 是否有其他方法或与此相关的任何其他文件。

【问题讨论】:

【参考方案1】:

该语法不适用于 Azure Synapse Analytics 专用 SQL 池,您将收到以下错误:

消息 103010,级别 16,状态 1,第 1 行解析错误:第 2 行,列: 40: 'WITH' 附近的语法不正确。

Msg 104467, Level 16, State 1, Line 1 强制的唯一约束是 不支持。要创建非强制唯一约束,您必须 在语句中包含 NOT ENFORCED 语法。

编写此语法的方法是使用ALTER TABLE 添加非聚集和非强制主键,例如

ALTER TABLE [dbo].[DimProductCategory] 
    ADD CONSTRAINT [PK_DimProductCategory_ProductCategoryKey] 
        PRIMARY KEY NONCLUSTERED ( [ProductCategoryKey] ) NOT ENFORCED;

但是由于该表是一个维度,我还建议将其分布更改为REPLICATE,您必须在表定义中执行此操作。所以整个声明会是这样的:

CREATE TABLE [dbo].[DimProductCategory](
    [ProductCategoryKey] [int] IDENTITY(1,1) NOT NULL UNIQUE NOT ENFORCED,
    [ProductCategoryAlternateKey] [int] NULL,
    [EnglishProductCategoryName] [nvarchar](50) NOT NULL,
    [SpanishProductCategoryName] [nvarchar](50) NOT NULL,
    [FrenchProductCategoryName] [nvarchar](50) NOT NULL
)
WITH (
    DISTRIBUTION = REPLICATE,
    CLUSTERED INDEX( [ProductCategoryKey] )
)

这将是您在实验室中转换其余语法的一个很好的练习。外键也不起作用。

【讨论】:

嗨@wBob 感谢您的回复我可以成功创建表并使用上述提示更改它正如您在帖子中提到的外键抛出错误。请提供一些使用 alter for foreign keys 的技巧 您好 @RRD,Azure Synapse Analytics 专用 SQL 池根本不支持外键。根本不运行这些语句。如果对您有帮助,请考虑对以上内容进行投票和/或标记为答案。 非常感谢! @wBob

以上是关于文档中显示的 sql 代码未在 azure synapse 专用 sql 池上运行的主要内容,如果未能解决你的问题,请参考以下文章

Azure WebJobs (3.x) 连续作业未在仪表板中显示函数

保存的数据框未在 sql server 中正确显示

NextJs App 在 Azure Web App 中部署时未在 nextjs 公用文件夹中加载图像

Azure Functions 未在本地创建 Azure 表列

Azure 文档 (SQL 数据仓库, Azure SQL 数据库文档)

Swagger UI 未在 azure .net 核心中生成,但在本地工作