Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在Azure Sql中更改复合主键_Sql_Sql Server_Azure_Azure Sql Database_Composite Key - Fatal编程技术网

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

无法在Azure Sql中更改复合主键,sql,sql-server,azure,azure-sql-database,composite-key,Sql,Sql Server,Azure,Azure Sql Database,Composite Key,表定义: 在上表中,我使用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, STATISTI

表定义:

在上表中,我使用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上的复合主键?

问题是,删除PK约束也会删除基础聚集索引,azure中不允许使用堆


您最好创建一个具有所需结构的新表,复制数据,删除旧表,重命名新表并重新创建FKs(如果有)。

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

V12启用的其他功能:


如何升级:

旧版和V12版SQL数据库服务器支持您正在执行的操作。只有在非V12服务器上进行插入时才需要使用聚集索引。您可以在非V12数据库中创建堆,也可以删除并重新创建聚集索引/约束。所以你不应该得到这个错误。你是如何运行这些语句的?您使用什么工具来运行这些语句

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