Sql server 将列主键和外键VARCHAR数据类型更改为INT数据类型
我使用SQLServer2008R2。 我有两个包含数据的表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
表具有varchar主键区域
表引用PersonalData
表使用varchar外键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
这是一个多步骤的过程:
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视图、检查约束等)。我要补充的唯一一点是,您应该首先在测试环境中执行这些步骤。这样您就知道它很可能在生产环境中工作。考虑:主键、外键和唯一键,以及索引