我有这个观点:
Create View View1
AS
Select F1,F2,0 As F3
From TB1
GO
Update View1 Set F3=1
这些命令会引发此错误:
更新或插入视图或函数'view1'失败,因为它包含派生或常量字段。
是否有更新“F3”字段的解决方案?
谢谢
答案 0 :(得分:4)
更改视图中常量列值的唯一方法是更改视图本身。在视图上的常量或计算列上运行UPDATE语句没有意义,因为该值不是物理存储在任何表中。因此,你必须做这样的事情:
ALTER VIEW View1 A
Select F1,F2,1 As F3
From TB1
现在,您可能想将此代码放入存储过程中。不幸的是,这也是不可能的,因为DDL statements are not allowed in Stored Procedures。因此,另一种解决方案是将列F3的值存储在单独的表中,并更改视图定义以将值带入视图:
CREATE TABLE F3Column (
Value AS int
)
go
INSERT F3Column VALUES (0)
go
CREATE VIEW View1 AS
select F1, F2, Value AS F3
from TB1, F3Column
go
-- This will allow you to change the value directly on the view:
UPDATE View1 SET F3 = 1
只需确保您的F3Column表始终包含1条记录。如果它不包含任何记录,则View1将始终为空。如果它包含多于1条记录,View1将为您提供重复记录。
答案 1 :(得分:0)
我认为您希望结果在结果中显示1
为F3
,如下所示:
SELECT F1, F2, 1 As F3
FROM View1
或者制作一个像这样的新视图:
Create View View2
AS
Select F1, F2, 1 As F3
From TB1
GO
答案 2 :(得分:0)
F3
不是任何表格中的列,这就是您无法更新值的原因。您需要将其添加到表中,或者在某些条件下使用CASE
CASE WHEN [condition goes here] THEN 1 END