为SQL Server中的视图添加常量可更新列

时间:2015-05-18 05:56:52

标签: sql-server

我有这个观点:

Create View View1 
AS 
Select F1,F2,0 As F3
From TB1

GO 

Update View1 Set F3=1

这些命令会引发此错误:

  

更新或插入视图或函数'view1'失败,因为它包含派生或常量字段。

是否有更新“F3”字段的解决方案?

谢谢

3 个答案:

答案 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)

我认为您希望结果在结果中显示1F3,如下所示:

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