如何在SQL Azure上更改主键

Way*_*yne 19 azure-sql-database

我将更改SQL Azure上的主键.但是,当使用Microsoft SQL Server Management Studio生成脚本时,它会引发错误.因为SQL Azure上的每个表都必须包含主键.在创建之前我不能放弃它.如果我必须改变它,我该怎么办?

脚本生成

IF  EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[mytable]') AND name = N'PK_mytable')
ALTER TABLE [dbo].[mytable] DROP CONSTRAINT [PK_mytable]
GO

ALTER TABLE [dbo].[mytable] ADD  CONSTRAINT [PK_mytable] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF)
GO
Run Code Online (Sandbox Code Playgroud)

错误信息

Msg 40054, Level 16, State 2, Line 3
Tables without a clustered index are not supported in this version of SQL Server. Please create a clustered index and try again.
Msg 3727, Level 16, State 0, Line 3
Could not drop constraint. See previous errors.
The statement has been terminated.
Msg 1779, Level 16, State 0, Line 3
Table 't_event_admin' already has a primary key defined on it.
Msg 1750, Level 16, State 0, Line 3
Could not create constraint. See previous errors.
Run Code Online (Sandbox Code Playgroud)

Vyr*_*tek 22

我遇到了这个问题并在论坛上联系了Azure团队.基本上是不可能的.您需要创建一个新表并将数据传输给它.

我所做的是创建一个事务,并在其中执行以下操作:

  • 将旧表重命名为OLD_MyTable.

  • 使用正确的主键创建新表并将其命名为MyTable.

  • 从OLD_MyTable到MyTable中选择内容.

  • 删除OLD_MyTable.

您可能还需要在任何约束上调用sp_rename,以便它们不会发生冲突.

另见:http://social.msdn.microsoft.com/Forums/en/ssdsgetstarted/thread/5cc4b302-fa42-4c62-956a-bbf79dbbd040


Sir*_*thi 8

它支持升级SQL V12和堆.因此,您可以删除主键并重新创建它.

  • 这实际上是一个很好的答案。我放弃了旧的主键,然后在大约一分钟内创建了一个新的主键。过去,我必须执行重命名和导入表的技巧。这很耗时。V12 具有更多 SQL Server 功能,包括对全文索引的支持。 (2认同)
  • 是的,在Azure SQl DB v12中,支持此功能 (2认同)