无法更改 Azure 中的复合主键 Sql
Unable to alter the Composite Primary Key in Azure Sql
Table定义:
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
在上面 table 中,我使用“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 服务器数据库上完全没问题,但是当我在 Azure 数据库上 运行 它时我得到错误:
Tables without a clustered index are not supported in this version of
SQL Server. Please create a clustered index and try again.
如何在azure上修改复合主键sql?
问题是删除 PK 约束也会删除底层聚集索引,并且 Azure 中不允许使用堆。
您最好的办法是创建一个具有所需结构的新 table,复制数据,删除旧的 table,重命名新的并重新创建 FK(如果有)。
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/
旧版本和 V12 版本的 SQL 数据库服务器支持您正在执行的操作。只有在非 V12 服务器上发生插入时才需要聚集索引。您可以在非 V12 数据库中创建一个堆,或者删除并重新创建集群 index/constraint。所以你不应该得到这个错误。您 运行 如何看待这些陈述?您使用什么工具来 运行 这些陈述?
Table定义:
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
在上面 table 中,我使用“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 服务器数据库上完全没问题,但是当我在 Azure 数据库上 运行 它时我得到错误:
Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.
如何在azure上修改复合主键sql?
问题是删除 PK 约束也会删除底层聚集索引,并且 Azure 中不允许使用堆。
您最好的办法是创建一个具有所需结构的新 table,复制数据,删除旧的 table,重命名新的并重新创建 FK(如果有)。
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/
旧版本和 V12 版本的 SQL 数据库服务器支持您正在执行的操作。只有在非 V12 服务器上发生插入时才需要聚集索引。您可以在非 V12 数据库中创建一个堆,或者删除并重新创建集群 index/constraint。所以你不应该得到这个错误。您 运行 如何看待这些陈述?您使用什么工具来 运行 这些陈述?