从视图及其所有相关表中删除记录

Hir*_*isi 3 view sql-server-2008 delete-row

我正在使用 SQL Server Management Studio 2008。

我想从一个视图中删除单个记录,该视图显示所有列的该记录中的空值。

我无法知道,从哪个表中我得到了这个空记录。

我检查了为视图连接的所有表,但没有一个表包含空记录。

谁能帮我从我的视图和所有相关表中删除这个空记录..?

因为我在许多其他页面中使用此视图,并且它在每个页面中都使用空值创建错误。

当我尝试从视图中删除此记录时,它显示如下错误

"Msg 4405, Level 16, State 1, Line 1
View or function 'viewGetProgressOverview' is not updatable because the modification affects multiple base tables."
Run Code Online (Sandbox Code Playgroud)

Rav*_*avi 5

如果您在 SQL 中创建了基于单个表的视图 - 您在视图上执行的 DML 操作会自动传播到基表。

但是,当您加入多个表以创建视图时,如果您对视图执行 DML 语句,则会遇到以下错误

Msg 4405, Level 16, State 1, Line 1
View or function 'ViewName' is not updatable because the modification affects
multiple base tables.
Run Code Online (Sandbox Code Playgroud)

更新联接视图的规则如下:

连接视图上的任何 INSERT、UPDATE 或 DELETE 操作一次只能修改一个基础基表。

更新规则

连接视图的所有可更新列必须映射到键保留表的列。有关密钥保留表的讨论,请参阅“密钥保留表”。如果视图是用 WITH CHECK OPTION 子句定义的,则所有连接列和重复表的所有列都是不可更新的。

删除规则

只要联接中只有一个保留键的表,就可以删除联接视图中的行。如果视图是用 WITH CHECK OPTION 子句定义的并且键保留表重复,则不能从视图中删除行。

插入规则

INSERT 语句不得显式或隐式引用非键保留表的列。如果连接视图是使用 WITH CHECK OPTION 子句定义的,则不允许使用 INSERT 语句。

参考 : -

插入到视图 - INSTEAD OF TRIGGER - SQL Server

带有连接表的 Sql 可更新视图