Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将列主键和外键VARCHAR数据类型更改为INT数据类型_Sql Server_Sql Server 2008_Primary Key_Sqldatatypes_Alter Table - Fatal编程技术网

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

Sql server 将列主键和外键VARCHAR数据类型更改为INT数据类型,sql-server,sql-server-2008,primary-key,sqldatatypes,alter-table,Sql Server,Sql Server 2008,Primary Key,Sqldatatypes,Alter Table,我使用SQLServer2008R2。 我有两个包含数据的表 区域表具有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.Te

我使用SQLServer2008R2。 我有两个包含数据的表

  • 区域
    表具有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

这是一个多步骤的过程:

  • 检查数据是否干净且可转换为
    int
  • 删除外键约束和
    FK_ID_区域上的任何索引
  • 删除主键约束和
    ID\u区域上的任何索引
  • ALTER TABLE[Z.Tests.Area]ALTER COLUMN[ID\u Area]int不为空
  • ALTER TABLE[Z.Tests.PersonalData]ALTER COLUMN[FK_ID_Area]int Null
  • 重新创建主键和索引
  • 重新创建外键和索引

  • 在这里,您一定要小心,因为可能还有其他因素会阻止此操作(Schemability视图、检查约束等)。

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