【发布时间】:2014-10-19 16:04:40
【问题描述】:
我有一列 Column 被声明为 NULL DEFAULT(GETUTCDATE()) 并且有一个包含此列的非聚集索引。我想将此列更改为NOT NULL DEFAULT(GETUTCDATE()),当我运行ALTER TABLE ALTER COLUMN 语句时,SQL Azure 服务说它无法更改该列,因为有一个取决于该列的索引。
这是一个生产数据库,该表包含大约一千万条记录。所以我宁愿不删除并重新创建索引,因为这会减慢数据库的速度(尤其是创建索引可能需要几分钟)。
如何在不重新创建索引的情况下更改列?
【问题讨论】:
-
我已经在本地服务器(即不是 Azure)上的 SQL Server 2012 SP1 上对此进行了测试,但它也不起作用。因此很可能有必要删除索引并在 Azure 上重新创建它。 ALTER TABLE Children ALTER COLUMN ChildName VARCHAR(50) NOT NULL 产生:Msg 5074,Level 16,State 1,Line 1 索引“IX_Children_ChildName”取决于列“ChildName”。消息 4922,级别 16,状态 9,第 1 行 ALTER TABLE ALTER COLUMN ChildName 失败,因为一个或多个对象访问此列。 (当然,无论如何都要检查列中是否没有NULL,这将是一个错误ev
标签: sql-server database azure-sql-database database-indexes alter-column