我有这样的看法:
Create View View1
AS
Select F1,F2,0 As F3
From TB1
GO
Update View1 Set F3=1
Run Code Online (Sandbox Code Playgroud)
这些命令会引发此错误:
更新或插入视图或函数“view1”失败,因为它包含派生字段或常量字段。
有没有更新“F3”字段的解决方案?
谢谢
更改视图中常量列值的唯一方法是更改视图本身。在视图上的常量或计算列上运行 UPDATE 语句没有意义,因为该值并未物理存储在任何表中。因此,您必须执行以下操作:
ALTER VIEW View1 A
Select F1,F2,1 As F3
From TB1
Run Code Online (Sandbox Code Playgroud)
现在,您可能会想将此代码放入存储过程中。不幸的是,这也是不可能的,因为存储过程中不允许使用 DDL 语句。因此,另一个解决方案是将 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
Run Code Online (Sandbox Code Playgroud)
只需确保您的 F3Column 表始终包含 1 条记录。如果它不包含任何记录,则 View1 将始终为空。如果它包含超过 1 条记录,View1 会给你重复。
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |