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

时间:2016-11-22 07:26:51

标签: sql-server sql-server-2008 primary-key sqldatatypes alter-table

我使用的是SQL Server 2008 R2。 我有2个包含数据的表。

  • Area表格有 varchar 主键

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

如何将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 个答案:

答案 0 :(得分:2)

这是一个多步骤的过程:

  1. 检查数据是否干净并可转换为int
  2. 删除FK_ID_Area
  3. 上的外键约束和任何索引
  4. 删除主键约束和ID_Area
  5. 上的所有索引
  6. ALTER TABLE [Z.Tests.Area] ALTER COLUMN [ID_Area] int Not Null;
  7. ALTER TABLE [Z.Tests.PersonalData] ALTER COLUMN [FK_ID_Area] int Null;
  8. 重新创建主键和索引
  9. 重新创建外键和索引
  10. 你肯定要在这里小心,因为有可能阻止它工作的其他东西(模式绑定视图,检查约束等)。