Azure sql database 如何更改SQL Azure上的主键
我将更改SQL Azure上的主键。但在使用MicrosoftSQLServerManagementStudio生成脚本时,它会抛出一个错误。因为SQLAzure上的每个表都必须包含一个主键。我不能在创建之前删除它。如果我必须改变它怎么办 脚本生成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 [
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
- 从旧表格中选择内容 进我的桌子
- 放下旧桌子
另请参见:您可以尝试以下脚本。将其更改为适合您的桌面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中受支持