3

我使用SQL Server 2008 R2。 我有2個包含數據的表。將列主鍵和外鍵VARCHAR數據類型更改爲INT數據類型

  • Area表有VARCHAR使用AreaVARCHAR主鍵

  • PersonalData表引用外鍵

我怎樣才能改變一個varchar主鍵和外鍵int數據類型?

SQL腳本:

CREATE TABLE [dbo].[Z.Tests.Area] 
(
    [ID_Area] [varchar](50) NOT NULL, 
    [Description] [varchar](150) NULL, 

    CONSTRAINT [PK_Z.Tests.Area] 
     PRIMARY KEY CLUSTERED ([ID_Area] ASC) 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Z.Tests.PersonalData] 
(
    [ID_PersonalData] [int] IDENTITY(1,1) NOT NULL, 
    [Username] [varchar](50) NULL, 
    [FK_ID_Area] [varchar](50) NULL, 

    CONSTRAINT [PK_Z.Tests.PersonalData] 
     PRIMARY KEY CLUSTERED ([ID_PersonalData] ASC) 
) ON [PRIMARY] 

ALTER TABLE [dbo].[Z.Tests.PersonalData] WITH CHECK 
    ADD CONSTRAINT [FK_Z.Tests.PersonalData_Z.Tests.Area] 
    FOREIGN KEY([FK_ID_Area]) 
     REFERENCES [dbo].[Z.Tests.Area] ([ID_Area]) 
GO 

ALTER TABLE [dbo].[Z.Tests.PersonalData] 
CHECK CONSTRAINT [FK_Z.Tests.PersonalData_Z.Tests.Area] 
GO 

回答

2

它是一個多步驟的過程:

  1. 檢查數據是乾淨的,轉換爲int
  2. 刪除外鍵約束和所有索引FK_ID_Area
  3. 刪除主鍵約束和ID_Area
  4. 012的任何索引
  5. ALTER TABLE [Z.Tests.Area] ALTER COLUMN [ID_Area] int Not Null;
  6. ALTER TABLE [Z.Tests.PersonalData] ALTER COLUMN [FK_ID_Area] int Null;
  7. 重新創建主鍵和索引
  8. 重新創建外鍵和索引

你肯定會想,因爲有可能會阻止這樣做可能其他的東西要小心這裏(模式化視圖,檢查約束等)。

+0

我唯一要補充的是你應該先在測試環境中執行這些步驟。這樣你就知道它很有可能在生產中工作。 –

+0

***考慮***:_Primary密鑰,外鍵和唯一密鑰以及索引_ – Kiquenet