表定义:
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 ”和“ Id2 ”组合复合主键。 现在我想在复合主键中包含“ 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上修改复合主键?
答案 0 :(得分:6)
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/
答案 1 :(得分:1)
问题是删除PK约束也会丢弃底层聚簇索引,而Azure中不允许使用堆。
您可以做的最好的事情是创建一个具有所需结构的新表,复制数据,删除旧表,重命名新表并重新创建FK(如果有)。
答案 2 :(得分:1)
您正在进行的操作受旧版和旧版支持。 V12版本的SQL数据库服务器。聚簇索引仅适用于非V12服务器上的插入。您可以在非V12数据库中创建堆,或者删除&重新创建聚簇索引/约束。所以你不应该得到这个错误。你是如何运行这些陈述的?您使用什么工具来运行语句?