簡體   English   中英

無法更改Azure SQL中的組合主鍵

[英]Unable to alter the Composite Primary Key in Azure Sql

表定義:

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服務器數據庫上運行得很好,但是當我在Azure數據庫上運行它時出現錯誤:

此版本的SQL Server不支持沒有聚集索引的表。 請創建一個聚集索引,然后重試。

我應該如何在Azure SQL上修改復合主鍵?

Azure SQL數據庫的最新更新(V12)允許您擁有沒有聚集索引的表(即作為堆)。 如果將服務器升級到最新版本,則可以運行查詢以成功修改PK。

V12啟用的其他功能: http : //azure.microsoft.com/zh-cn/documentation/articles/sql-database-preview-whats-new/

如何升級: http : //azure.microsoft.com/zh-cn/documentation/articles/sql-database-preview-upgrade/

問題在於,刪除PK約束也會刪除基礎群集索引,並且Azure中不允許堆。

最好的辦法是創建具有所需結構的新表,復制數據,刪除舊表,重命名新表並重新創建FK(如果有)。

舊的和V12版本的SQL數據庫服務器支持您正在執行的操作。 僅在非V12服務器上進行插入時才需要集群索引。 您可以在非V12數據庫中創建堆,也可以刪除並重新創建聚簇索引/約束。 因此,您不應收到此錯誤。 您如何運行這些語句? 您使用什么工具來運行語句?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM