首页 文章

无法更改Azure Sql中的复合主键

提问于
浏览
0

Table Definition:

CREATE TABLE [dbo].[tbl](
    [Id1] [int] NOT NULL,
    [Id2] [int] NOT NULL,
    [Id3] [int] NOT NULL,
    [IsActive] [bit] NOT NULL,
    [CreatedTs] [datetime] NOT NULL,
 CONSTRAINT [PK_tbl] PRIMARY KEY CLUSTERED 
(
    [Id1] ASC,
    [Id2] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)

GO

ALTER TABLE [dbo].[tbl] ADD  CONSTRAINT [DF_tbl_IsActive]  DEFAULT ((1)) FOR [IsActive]
GO

ALTER TABLE [dbo].[tbl] ADD  CONSTRAINT [DF_tbl_CreatedTs]  DEFAULT (getdate()) FOR [CreatedTs]
GO

在上表中,我在复合主键中使用“ Id1 " and " Id2 " combination. Now I want to include " Id3 ”复合主键,为此我正在执行以下操作:

ALTER TABLE tbl
DROP CONSTRAINT PK_tbl


ALTER TABLE [dbo].[tbl] ADD  CONSTRAINT [PK_tbl] PRIMARY KEY CLUSTERED 
(
    [Id1] ASC,
    [Id2] ASC,
    [Id3] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) 
GO

上面的查询在我的本地sql server db上运行得很好,但是当我在Azure db上运行它时出现错误:

此版本的SQL Server不支持没有聚簇索引的表 . 请创建聚簇索引,然后重试 .

我应该如何修改azure sql上的复合主键?

3 回答

  • 1

    问题是丢弃PK约束也会丢弃底层聚簇索引,而Azure中不允许使用堆 .

    您可以做的最好的事情是创建一个具有所需结构的新表,复制数据,删除旧表,重命名新表并重新创建FK(如果有) .

  • 1

    Azure SQL数据库的最新更新(V12)允许您拥有没有聚簇索引的表(即堆) . 如果将服务器升级到最新版本,则可以运行查询以成功修改PK .

    V12启用的其他功能:http://azure.microsoft.com/en-us/documentation/articles/sql-database-preview-whats-new/

    如何升级:http://azure.microsoft.com/en-us/documentation/articles/sql-database-preview-upgrade/

  • 6

    旧的和V12版本的SQL数据库服务器支持您正在执行的操作 . 聚簇索引仅适用于非V12服务器上的插入 . 您可以在非V12数据库中创建堆,或者删除并重新创建聚簇索引/约束 . 所以你不应该得到这个错误 . 你是如何运行这些陈述的?您使用什么工具来运行语句?

相关问题