将列的主键和外键VARCHAR数据类型更改为INT数据类型

3
我使用的是SQL Server 2008 R2。 我有两个包含数据的表。
  • Area 表有一个 varchar 主键

  • PersonalData 表引用 Area 表,使用 varchar 外键

如何将 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
1个回答

3
这是一个多步骤的过程:
  1. 检查数据是否干净并可转换为 int
  2. 删除 FK_ID_Area 外键约束和任何索引
  3. 删除 ID_Area 主键约束和任何索引
  4. ALTER TABLE [Z.Tests.Area] ALTER COLUMN [ID_Area] int Not Null;
  5. ALTER TABLE [Z.Tests.PersonalData] ALTER COLUMN [FK_ID_Area] int Null;
  6. 重新创建主键和索引
  7. 重新创建外键和索引
在此过程中您需要特别小心,因为还有其他可能会阻止这一过程正常运行的情况(如:schemabound 视图、check 约束等)。

唯一我要补充的是您应该首先在测试环境中执行这些步骤。这样,您就知道它很可能在生产环境中运行良好。 - Neo
考虑:主键、外键和唯一键以及索引。 - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接