Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL SERVER中更改要计算的列_Sql_Sql Server_Sql Server 2008_Calculated Columns_Alter - Fatal编程技术网

在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]));

你不能直接删除这个列,然后按计算结果重新创建它吗?好建议。我不这样做的原因是该列被其他表引用,我试图避免删除并重新创建这些表。