2011-04-13 3 views
18

SQL Azure에서 기본 키를 변경하려고합니다. 그러나 Microsoft SQL Server Management Studio를 사용하여 스크립트를 생성 할 때 오류가 발생합니다. SQL Azure의 모든 테이블에는 기본 키가 있어야하기 때문입니다. 그리고 나는 그것을 만들기 전에 그것을 떨어 뜨릴 수 없다. 변경해야 할 경우 어떻게해야합니까?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. 

답변

22

오류 메시지가. 기본적으로 불가능합니다. 새 테이블을 만들어 데이터를 테이블로 전송해야합니다.

  • 이 OLD_MyTable에 이전 테이블 명칭 변경 :

    은 내가 한 일은 다음과 같이 트랜잭션을 생성하고 그 안에 있었다.

  • 올바른 기본 키를 사용하여 새 테이블을 만들고 MyTable이라고합니다.

  • OLT_MyTable 의 내용을 MyTable로 선택하십시오.

  • Drop OLD_MyTable.

충돌이 발생하지 않도록 모든 제약 조건에서 sp_rename을 호출해야 할 수도 있습니다.

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

3

당신은 다음과 같은 스크립트를 시도 할 수 있습니다. 테이블 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' 
4

본인이 늦을 수도 있지만 다른 사람들에게 도움이 될 수 있습니다.

최근에이 문제가 발생하여 Azure에서 데이터베이스를 다운로드하고 로컬로 복원하고 로컬 키를 SQL Azure 특정 문제로 로컬로 업데이트 한 다음 데이터베이스를 다시 Azure로 가져옵니다.

이렇게하면 데이터베이스 이름을 바꾸거나 데이터베이스간에 데이터를 전송할 때 발생하는 문제가 해결되었습니다.

+0

놀랍도록 간단한 답변입니다. 수출과 레크리에이션을 구현하는 것은 처음에는 두뇌가 뒤틀린 것 같았지만 결국 엔 너무 우아했습니다. – krillgar

6

업그레이드 SQL V12 및 힙이 지원됩니다. 따라서 기본 키를 삭제하고 다시 만들 수 있습니다.

+1

질문과 전혀 관련이 없습니다. – Casey

+1

이것은 실제로 좋은 대답입니다. 나는 오래된 pk를 떨어 뜨린 다음 약 1 분 안에 새로운 프라이 머리 키를 만들었다. 과거에는 이름 바꾸기 및 테이블 트릭 가져 오기 작업을 수행해야했습니다. 시간이 많이 걸렸습니다. V12에는 FullText 인덱싱을 비롯한 많은 SQL Server 기능이 추가되었습니다. –

+0

이 질문은 Azure에 관한 것입니다. 독립형 데이터베이스가 아닙니다. –

0

변경 PK는 SQL Azure의 최신 버전에서 이미 지원되므로이 질문은 구식입니다. 임시 테이블을 만들 필요가 없습니다.

관련 문제