如何在SQL Server 2008中将列从int更改为Uniqueidentifier

4

我有一张表,其中列“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_STUDENT_DATA。我的 ALTER 语句是:
ALTER TABLE dbo.STUDENT COLUMN ID uniqueidentifier

我遇到了错误:
身份列'HISTORY_ID'的数据类型必须是int、bigint、smallint、tinyint或带有0位小数或数字的十进制或数值,并且必须被限制为非空。

我认为你最好添加一个新列并重命名;因为你不能将uniqueindentifier作为identity列,你的ID也是索引的一部分,所以也应该进行更改,如果在id中有用过的数据-你也要处理它。如果表格为空且没有其他引用,则只需删除并重新创建即可。 - Allan S. Hansen
它起作用了。我已经删除了ID列,并使用唯一标识符数据类型重新创建了它。因为identity(1,1)不允许更改其数据类型,因为identity是一种约束。 - user6523034
谢谢。现在它运行得很好。 - user6523034
必须阅读这篇文章 GUIDs as primary keys or clustering key,看一下在 SQL Server 表中作为聚集键的 uniqueidentifier 有多么糟糕。我强烈建议不要这样做! - marc_s
3个回答

3
身份列与唯一标识符数据类型列不兼容。因此,您需要删除该列并创建具有唯一标识符数据类型的新列。由于IDENTITY不能与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()

在Oracle SQL PL/SQL中,IDENTITY和UniqueIdentifier的等效物是什么? - Rupasa Sushma

1
请按照以下步骤操作:
首先,您应该删除ID列中的PrimaryKey。
其次,您应该使用[ID] [int] IDENTITY(1,1) NULL更改ID列,并使用NULL值调用更新命令。
第三步,调用命令ALTER TABLE dbo.STUDENT COLUMN ID uniqueidentifier NOT NULL并将主键设置为此列。

0

情况1:如果您想在没有约束的情况下更改列

首先,如果您想从INT更改为UNIQUEIDENTIFIER,则需要删除现有列。请按照以下方式操作:

ALTER TABLE TableName
DROP COLUMN COLUMN1, COLUMN2  --IF you want multiple/single column

接下来,您可以按照以下方式添加列:

ALTER TABLE TableName
ADD  COLUMN1 UNIQUEIDENTIFIER,
     COLUMN2 UNIQUEIDENTIFIER

情况2:如果您想要更改包含约束的列

首先,移除该约束,然后执行上述步骤。


在Oracle SQL PL/SQL中,UniqueIdentifier的等效物是什么? - Rupasa Sushma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接