在SQL SERVER中更改要计算的列
我有一张和这张相似的桌子:在SQL SERVER中更改要计算的列,sql,sql-server,sql-server-2008,calculated-columns,alter,Sql,Sql Server,Sql Server 2008,Calculated Columns,Alter,我有一张和这张相似的桌子: CREATE TABLE [dbo].[test]( [id] [int] IDENTITY(1,1) NOT NULL, [action] [varchar](50), [id_source] [int] NULL, [id_dest] [int] NULL, [name] [varchar](255) ) 我正在尝试转换要计算的名称列。我尝试过类似的方法,但没有成功 ALTER TABLE [dbo].[test] AL
CREATE TABLE [dbo].[test](
[id] [int] IDENTITY(1,1) NOT NULL,
[action] [varchar](50),
[id_source] [int] NULL,
[id_dest] [int] NULL,
[name] [varchar](255)
)
我正在尝试转换要计算的名称列。我尝试过类似的方法,但没有成功
ALTER TABLE [dbo].[test]
ALTER COLUMN [name] AS ([dbo].[f_get_name]([id_source],[id_dest],[action]))
这张桌子现在是空的。
是否可以使用ALTER命令来实现这一点?
谢谢您不能更改它
指定要更改或更改的命名列
修改后的列不能是以下任一列:
具有时间戳数据类型的列
表的ROWGUIDCOL
计算列或用于计算列。
您需要删除并重新创建:
ALTER TABLE [dbo].[test]
DROP COLUMN [name];
ALTER TABLE [dbo].[test]
ADD [name] AS ([dbo].[f_get_name]([id_source],[id_dest],[action]));
是否可以使用ALTER命令来实现这一点
不,通过改变表格是无法实现的。ALTERTABLE命令将限制您这样做,因为您的列涉及计算
解决方案:
您需要删除该列并重新创建它,如下所示:
alter table [dbo].[test]
drop column [name];
alter table [dbo].[test]
add [name] as ([dbo].[f_get_name]([id_source],[id_dest],[action]));
你不能直接删除这个列,然后按计算结果重新创建它吗?好建议。我不这样做的原因是该列被其他表引用,我试图避免删除并重新创建这些表。