更新失败,因为它包含派生或常量字段

时间:2018-06-08 15:18:24

标签: c# sql asp.net-mvc

我的SQL Server Management Studio视图中,Pocket列默认设置为0

SELECT ToolAssembly.ID, CAST(0 AS int) AS Pocket FROM dbo.ToolAssembly

当我尝试使用代码更新MMSD中的视图时:

SqlCommand command = new SqlCommand("UPDATE [mmlTooling].[dbo].vHHPocket SET Pocket = @pid Where ID = @tid", sqlCon);

command.Parameters.AddWithValue("@pid", pid);
command.Parameters.AddWithValue("@tid", tid);
command.ExecuteNonQuery();

然后,出现错误消息:

  

更新或插入视图或功能' mmlTooling.dbo.vHHPocket'失败   因为它包含派生或常量字段。

这个问题可能是什么原因以及如何解决?

2 个答案:

答案 0 :(得分:4)

CAST(0 AS int) AS Pocket是“派生或常量字段”。如果Pocket是常量0,并且您告诉它更新该值,那么您希望数据库在哪里写入该值?

只需更新dbo.ToolAssembly

答案 1 :(得分:1)

SQL Server视图仅在某些条件下可更新。 请查看this link

检查"可更新视图"链接部分。

  

更新无法正常运行,因为您的观点并未完全满足这些要求   条件/限制。