如何在SQL Azure上更改主键

问题描述

| 我将更改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
错误信息
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,State 0,Line 3
Could not drop constraint. See previous errors.
The statement has been terminated.
Msg 1779,Line 3
Table \'t_event_admin\' already has a primary key defined on it.
Msg 1750,Line 3
Could not create constraint. See previous errors.
    

解决方法

我遇到了这个确切的问题,并在论坛上联系了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     ,升级SQL V12,并在其上支持堆。因此,您可以删除主键并重新创建它。     ,我很欣赏这对于您自己来说可能是很晚的事情,但这可能会对其他人有所帮助。 我最近遇到了这个问题,发现最痛苦的解决方案是从Azure下载数据库,在本地还原数据库,在本地更新主键(因为键约束是SQL Azure特定的问题),然后将数据库还原回Azure 。 这样就节省了有关重命名数据库或在它们之间传输数据的任何问题。     ,您可以尝试以下脚本。更改它以适合您的表定义。
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\'
    ,这个问题已经过时,因为最新版本的SQL Azure已支持更改PK。而且您不必创建临时表。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...