Sql server 更改列的数据类型/约束
我有一个现有列Sql server 更改列的数据类型/约束,sql-server,Sql Server,我有一个现有列people,其中包含一个列pid。我想从以下位置更改pid: int->5个字符长的字符串 唯一->在pid和company\u id中唯一(外键) 我目前没有在mssql数据库中使用pid,因此我可以删除该列。我的理解是,我必须将我的任务分为三个步骤: 下降柱 添加列 为列添加唯一性 我的mssql语句是否如下所示: ALTER TABLE people DROP COLUMN pid; ALTER TABLE people ADD pid VARCHAR(5); ALTE
people
,其中包含一个列pid
。我想从以下位置更改pid
:
- int->5个字符长的字符串
- 唯一->在
和pid
中唯一(外键)company\u id
pid
,因此我可以删除该列。我的理解是,我必须将我的任务分为三个步骤:
ALTER TABLE people DROP COLUMN pid;
ALTER TABLE people ADD pid VARCHAR(5);
ALTER TABLE people ADD CONSTRAINT unique_pid UNIQUE (pid, company_id);
我已经执行了上面的mssql语句,但在我的
人物
中没有看到pid
列。我没有注意到抛出任何错误,我想在深入研究之前验证我的语句是否正确。我想问题在于批处理失败。可能的原因是,在创建约束之前,您需要为pid
设置一个值。如果表中有任何数据且公司id
不唯一,则会有重复的值。因此,作为一个简单的例子,以下内容将起作用:
CREATE TABLE #people (pid int, company_id int)
GO
SELECT *
FROM #people;
GO
ALTER TABLE #people DROP COLUMN pid;
ALTER TABLE #people ADD pid VARCHAR(5);
ALTER TABLE #people ADD CONSTRAINT unique_pid UNIQUE (pid, company_id);
GO
SELECT *
FROM #people;
GO
DROP TABLE #people;
但是,如果我先在表中输入一些数据,批处理将失败:
CREATE TABLE #people (pid int, company_id int)
GO
INSERT INTO #people (company_id)
VALUES (1),(1),(2);
GO
SELECT *
FROM #people;
GO
ALTER TABLE #people DROP COLUMN pid;
ALTER TABLE #people ADD pid VARCHAR(5);
ALTER TABLE #people ADD CONSTRAINT unique_pid UNIQUE (pid, company_id);
GO
SELECT *
FROM #people;
GO
DROP TABLE #people;
在本例中,我实际上仍然有列pid
,但是约束失败。根据您处理事务的位置,很可能是DROP
已提交,但是ADD
已使用ADD约束回滚
要解决此问题,您需要首先用相关数据填充(新)列pid
,然后添加约束
,那么,您的问题到底是什么?如果是“上面的SQL行得通吗?”您是否尝试过(可能是在开发环境中)?若否,原因为何?去试试吧(再说一次,先使用开发环境,这就是他们的目的)!如果是的,而且确实有效,问题是什么?如果它不起作用,有什么问题吗?@Larnu-Woops,我忘了添加我的问题。我已经尝试了我的语句,但是我再也看不到pid
列了。我也没有看到任何错误。是否刷新SSMS?