Как я могу изменить первичный ключ в SQL Azure - PullRequest
19 голосов
/ 13 апреля 2011

Я собираюсь изменить первичный ключ в 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, 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.

Ответы [ 5 ]

22 голосов
/ 15 апреля 2011

Я столкнулся с этой проблемой и связался с командой Azure на форумах.В принципе это невозможно.Вам нужно будет создать новую таблицу и перенести в нее данные.

Я создал транзакцию и в ней сделал следующее:

  • Переименовалстарая таблица в OLD_MyTable.

  • Создайте новую таблицу с правильным Первичным ключом и назовите ее MyTable.

  • Выберите содержимое из OLD_MyTable в MyTable.

  • Drop OLD_MyTable.

Вам также может понадобиться вызвать sp_rename для любых ограничений, чтобы они не конфликтовали.

Смотрите также: http://social.msdn.microsoft.com/Forums/en/ssdsgetstarted/thread/5cc4b302-fa42-4c62-956a-bbf79dbbd040

8 голосов
/ 10 апреля 2015

обновить SQL V12 и кучи поддерживаются на нем. Таким образом, вы можете удалить первичный ключ и воссоздать его.

4 голосов
/ 04 июля 2014

Я ценю, что это может быть поздно для вас, но это может помочь другим.

Недавно я столкнулся с этой проблемой и обнаружил, что наименее болезненным решением было загрузить базу данных из Azure, восстановить ее локально, обновить первичный ключ локально (поскольку ограничение ключа является специфической проблемой SQL Azure), а затем восстановить базу данных. обратно в лазурь.

Это позволило избежать любых проблем, связанных с переименованием баз данных или передачей данных между ними.

3 голосов
/ 06 августа 2013

Вы можете попробовать следующие скрипты. Измените его, чтобы оно подходило для вашего стола.

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'
2 голосов
/ 23 января 2018

Этот вопрос устарел, поскольку изменение PK уже поддерживается в последней версии SQL Azure. И вам не нужно создавать временную таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...