我在SQL Server2005的一个大表中有一个持久化计算列。
我希望将其转换为常规列,并保留当前值。
我是否必须在transaction中重新创建列并更新整个表,或者是否可以仅更改计算列规范,以及如何更改?
发布于 2010-11-10 19:18:57
-- 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发布于 2011-02-04 06:31:07
发帖者希望保留该列的名称。我在米奇的代码末尾添加了一行代码,以便在删除PersistedColumn后进行重命名
-- 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'发布于 2017-08-10 15:33:06
@Mitch小麦的解决方案效果很好。但是,有时会抛出“Invalid Column name: newColumn”错误,因为表在尝试运行更新之前尚未更新。
要解决此问题,请添加一条GO语句,将这两个语句分成批:
-- 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'https://stackoverflow.com/questions/4143867
复制相似问题