Sql server 如何在SQLServer2008中将列从int改为Uniqueidentifier

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

我有一个列“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 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等效于什么?