Azure sql database 如何更改SQL Azure上的主键

Azure sql database 如何更改SQL Azure上的主键,azure-sql-database,Azure Sql Database,我将更改SQL Azure上的主键。但在使用MicrosoftSQLServerManagementStudio生成脚本时,它会抛出一个错误。因为SQLAzure上的每个表都必须包含一个主键。我不能在创建之前删除它。如果我必须改变它怎么办 脚本生成 IF EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[mytable]') AND name = N'PK_mytable') ALTER TABLE [

我将更改SQL Azure上的主键。但在使用MicrosoftSQLServerManagementStudio生成脚本时,它会抛出一个错误。因为SQLAzure上的每个表都必须包含一个主键。我不能在创建之前删除它。如果我必须改变它怎么办

脚本生成

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
错误消息

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.

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

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

  • 将旧表重命名为old_MyTable

  • 使用正确的主键创建新表,并将其称为MyTable

  • 从旧表格中选择内容 进我的桌子

  • 放下旧桌子

您可能还需要对任何约束调用sp_rename,以便它们不会冲突


另请参见:

您可以尝试以下脚本。将其更改为适合您的桌面def

EXECUTE sp_rename N'[PK_MyTable]', N'[PK_MyTable_old]',  'OBJECT'

CREATE TABLE [dbo].[Temp_MyTable](
[id] [int] NOT NULL,
[text] [text] NOT NULL CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED (
[id] ASC)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON))

INSERT INTO dbo.[Temp_MyTable] (Id, Text)
SELECT Id, Text FROM dbo.MyTable

drop table dbo.MyTable
EXECUTE sp_rename N'Temp_MyTable', N'MyTable', 'OBJECT'

我很感激这对你自己来说可能太晚了,但它可能会帮助别人

我最近遇到了这个问题,发现最简单的解决方案是从Azure下载数据库,在本地还原,在本地更新主键(因为密钥约束是SQL Azure特有的问题),然后将数据库还原回Azure


这保存了与重命名数据库或在数据库之间传输数据有关的所有问题。

升级SQL V12并支持其上的堆。因此,您可以删除主键并重新创建它。

此问题已过时,因为最新版本的SQL Azure已经支持更改主键。而且您不必创建临时表。

这是一个多么简单的答案。实施出口和娱乐有点让人绞尽脑汁,因为这是我第一次这么做,但最终,它是如此优雅。与问题完全无关。这实际上是一个很好的答案。我放弃了我的旧pk,然后在大约一分钟内创建了一个新的主键。在过去,我必须执行重命名和导入表的技巧。这很费时。V12有很多SQL Server功能,包括支持全文索引。这个问题是关于Azure的。不是独立数据库。是的,在Azure SQl DB v12中,这是supportedSource吗?我不知道如何执行此操作。来源:在标题中有一行:适用于:SQL Server 2016(13.x)及更高版本,Azure SQL数据库,Azure SQL托管实例。这意味着它在SQL Azure中受支持