Sql server 如何在SQLServer2008中将列从int改为Uniqueidentifier
我有一个列“ID”为数据类型int的表Sql server 如何在SQLServer2008中将列从int改为Uniqueidentifier,sql-server,Sql Server,我有一个列“ID”为数据类型int的表 CREATE TABLE [dbo].[STUDENT] ( [ID] [int] IDENTITY(1,1) NOT NULL, [DOB] [datetime] NOT NULL , [NAME] [nvarchar](250) NULL, [CLASS] [nvarchar](50) NULL, CONSTRAINT [PK_STUDENT_DATA] PRIMARY KEY CLUSTE
CREATE TABLE [dbo].[STUDENT]
(
[ID] [int] IDENTITY(1,1) NOT NULL,
[DOB] [datetime] NOT NULL ,
[NAME] [nvarchar](250) NULL,
[CLASS] [nvarchar](50) NULL,
CONSTRAINT [PK_STUDENT_DATA]
PRIMARY KEY CLUSTERED ([ID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
) ON [PRIMARY]
现在我想将数据类型从int
更改为uniqueidentifier
。我已删除约束PK\u学生\u数据
。我的ALTER
语句是
ALTER TABLE dbo.STUDENT COLUMN ID uniqueidentifier
我得到一个错误:
标识列“HISTORY_ID”的数据类型必须为int,bigint,
smallint、tinyint或小数或数字,比例为0,以及
被约束为不可为空
请按照以下步骤操作: 首先,您应该删除ID列中的PrimaryKey 其次,您应该使用
[ID][int]IDENTITY(1,1)NULL更改ID列,并使用NULL值调用update命令
第三,,调用命令ALTER TABLE dbo.STUDENT COLUMN ID uniqueidentifier NOT NULL
并为此列设置主键。标识列与uniqueidentifier
数据类型列不兼容。因此,您需要删除该列并使用uniqueidentifier
数据类型创建新列。因为identifier
不能与GUID
一起使用。请改用NEWID
执行以下步骤:
1。最初,您需要从表中删除约束
DROP Index [PK_STUDENT_DATA] ON STUDENT
2.之后
ALTER TABLE STUDENT drop COLUMN ID
3.最后
ALTER TABLE STUDENT
ADD [Id] UNIQUEIDENTIFIER NOT NULL
PRIMARY KEY NONCLUSTERED DEFAULT NEWID()
案例1:如果您希望无约束地更改列
如果要从INT
更改为UNIQUEIDENTIFIER
,首先需要删除现有列。请按以下方式执行此操作:
ALTER TABLE TableName
DROP COLUMN COLUMN1, COLUMN2 --IF you want multiple/single column
ALTER TABLE TableName
ADD COLUMN1 UNIQUEIDENTIFIER,
COLUMN2 UNIQUEIDENTIFIER
之后,您可以通过以下方式添加列:
ALTER TABLE TableName
DROP COLUMN COLUMN1, COLUMN2 --IF you want multiple/single column
ALTER TABLE TableName
ADD COLUMN1 UNIQUEIDENTIFIER,
COLUMN2 UNIQUEIDENTIFIER
案例2:如果要更改包含约束的列
然后首先删除该约束并执行上述步骤。我认为您最好添加一个新列并重命名;因为您不能将UniqueIdentifier作为标识列,所以您的ID也是索引的一部分,因此也应该进行更改,如果您使用的ID中有数据,那么您也必须处理这个问题。如果该表是空的,并且没有在其他地方引用,那么只需删除它并重新创建它,就可以了。我已经删除了列ID,并使用数据类型uniqueidentifier重新创建了它。因为标识(1,1)不允许更改其数据类型,因为标识是一种约束。谢谢。现在它工作得很好。您必须阅读本文,看看uniqueidentifier
作为SQL Server表中的集群键有多糟糕。我强烈建议不要这样做!在Oracle sql中,标识和UniqueIdentifier等效于什么?在Oracle sql中,UniqueIdentifier等效于什么?