首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将计算列转换为常规列

将计算列转换为常规列
EN

Stack Overflow用户
提问于 2010-11-10 19:15:58
回答 5查看 11.8K关注 0票数 17

我在SQL Server2005的一个大表中有一个持久化计算列。

我希望将其转换为常规列,并保留当前值。

我是否必须在transaction中重新创建列并更新整个表,或者是否可以仅更改计算列规范,以及如何更改?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-10 19:18:57

代码语言:javascript
复制
-- Create a new Column (unpersisted):
ALTER TABLE MyTable
   ADD newColumn DatatypeOfPersistedColumn
GO

UPDATE myTable
SET newColumn = PersistedColumn
GO

-- Delete the persisted column
ALTER TABLE MyTable
   DROP COLUMN PersistedColumn
GO

-- Rename new column to old name
EXEC sp_rename 'MyTable.newColumn', 'PersistedColumn', 'COLUMN'
GO
票数 21
EN

Stack Overflow用户

发布于 2011-02-04 06:31:07

发帖者希望保留该列的名称。我在米奇的代码末尾添加了一行代码,以便在删除PersistedColumn后进行重命名

代码语言:javascript
复制
-- Create a new Column (unpersisted):
ALTER TABLE MyTable
   ADD newColumn DatatypeOfPersistedColumn

UPDATE myTable
SET newColumn = PersistedColumn

-- Delete the persisted column
ALTER TABLE MyTable
   DROP COLUMN PersistedColumn

-- Rename the new column to the old name
EXEC sp_rename 'MyTable.newColumn', 'PersistedColumn', 'COLUMN'
票数 7
EN

Stack Overflow用户

发布于 2017-08-10 15:33:06

@Mitch小麦的解决方案效果很好。但是,有时会抛出“Invalid Column name: newColumn”错误,因为表在尝试运行更新之前尚未更新。

要解决此问题,请添加一条GO语句,将这两个语句分成批:

代码语言:javascript
复制
-- Create a new Column (unpersisted):
ALTER TABLE MyTable
   ADD newColumn DatatypeOfPersistedColumn

GO

UPDATE myTable
SET newColumn = PersistedColumn

-- Delete the persisted column
ALTER TABLE MyTable
   DROP COLUMN PersistedColumn

-- Rename new column to old name
EXEC sp_rename 'MyTable.newColumn', 'PersistedColumn', 'COLUMN'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4143867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档