【问题标题】:Issue with SQL Azure regarding clustered index and delete constraintsSQL Azure 关于聚集索引和删除约束的问题
【发布时间】:2013-06-09 20:11:24
【问题描述】:

我有以下 SQL 脚本,似乎可以在本地 SQL 2008 R2 实例上运行,但在 Azure SQL 上失败。

我已经搜索了网络,但还没有找到任何解决方案。

有什么建议吗?

我想避免使用身份列。

CREATE TABLE dbo.[Category]
(
    CategoryId NVARCHAR(36),
    CONSTRAINT PK_Category_CategoryId PRIMARY KEY CLUSTERED(CategoryId)
)
GO
CREATE TABLE dbo.[File]
(
    FileId NVARCHAR(36),
    CONSTRAINT PK_File_FileId PRIMARY KEY CLUSTERED(FileId)
)
GO
CREATE TABLE dbo.[FileCategory]
(
    FileId NVARCHAR(36),
    CategoryId NVARCHAR(36)
    CONSTRAINT FK_FileCategory_FileId FOREIGN KEY (FileId) REFERENCES [File](FileId) ON DELETE CASCADE,
    CONSTRAINT FK_FileCategory_CategoryId FOREIGN KEY (CategoryId) REFERENCES [Category](CategoryId) ON DELETE CASCADE,
)
GO
INSERT INTO [Category] VALUES('ABC')
INSERT INTO [Category] VALUES('DEF')
INSERT INTO [Category] VALUES('GHI')
GO

以上运行正常,但在以下语句中失败,错误如下所示:

DELETE FROM [Category] WHERE [CategoryId] = 'ABC'

消息 40054,级别 16,状态 1,行 3 没有聚集索引的表 此版本的 SQL Server 不支持。请创建一个 聚集索引,然后重试。

【问题讨论】:

    标签: sql-server azure azure-sql-database


    【解决方案1】:

    尝试在FileCategory 上设置PRIMARY KEY -

    CREATE TABLE [dbo].[FileCategory]
    (
        [FileId] [nvarchar](36) NOT NULL,
        [CategoryId] [nvarchar](36) NOT NULL,
         CONSTRAINT [PK_FileCategory] PRIMARY KEY CLUSTERED 
        (
            [FileId], [CategoryId]
        ) ON [PRIMARY]
    ) ON [PRIMARY]
    

    【讨论】:

    • 使用 ON [PRIMARY] 添加 CONSTRAINT 会导致消息 40514、级别 16、状态 1、第 23 行“文件组引用和分区方案”在此版本的 SQL Server 中不受支持。删除 ON PRIMARY 有效,但这仍然支持删除级联吗?
    • 对不起,我不是那个意思。我只是建议添加一个复合 PK。
    • 我很抱歉。我猜你的意思是说在 FileCategory 上包含主键约束(除了外键约束)让两个约束都起作用。谢谢,
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    • 1970-01-01
    • 2019-10-25
    • 2014-10-01
    • 2015-07-03
    • 1970-01-01
    相关资源
    最近更新 更多