Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server 2008 R2:通过删除特定表来更改视图_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql server SQL Server 2008 R2:通过删除特定表来更改视图

Sql server SQL Server 2008 R2:通过删除特定表来更改视图,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,我有以下三个表,并为所有三个表创建了视图 表格:s1 CREATE TABLE s1 ( Cola INT, Colb VARCHAR(10) ); 表格:s2 CREATE TABLE s2 ( Cola INT, Colb VARCHAR(10) ); 表格:s3 CREATE TABLE s3 ( Cola INT, Colb VARCHAR(10) ); 插入: INSERT INTO s1 VALUES(1,'a'); INSERT INTO s1 VALUES(1,

我有以下三个表,并为所有三个表创建了视图

表格
s1

CREATE TABLE s1
(
 Cola INT,
 Colb VARCHAR(10)
);
表格
s2

CREATE TABLE s2
(
 Cola INT,
 Colb VARCHAR(10)
);
表格
s3

CREATE TABLE s3
(
 Cola INT,
 Colb VARCHAR(10)
);
插入

INSERT INTO s1 VALUES(1,'a');
INSERT INTO s1 VALUES(1,'b');

INSERT INTO s2 VALUES(3,'c');
INSERT INTO s2 VALUES(4,'d');

INSERT INTO s3 VALUES(1,'a');
INSERT INTO s3 VALUES(1,'b');
-------------
cola    colb
-------------
1       a
1       b
3       c
4       d
1       a
1       b
创建视图
sx

CREATE VIEW sx as
SELECT * FROM s1
UNION ALL 
SELECT * FROM s2
UNION ALL
SELECT * FROM s3;
现在我有这个:

SELECT * FROM Sx;
结果

INSERT INTO s1 VALUES(1,'a');
INSERT INTO s1 VALUES(1,'b');

INSERT INTO s2 VALUES(3,'c');
INSERT INTO s2 VALUES(4,'d');

INSERT INTO s3 VALUES(1,'a');
INSERT INTO s3 VALUES(1,'b');
-------------
cola    colb
-------------
1       a
1       b
3       c
4       d
1       a
1       b
注意:我想
改变视图
,在视图中我想删除那些
cola
包含值
1
的表。根据我的说法,表
s1
s3
都有这些值

注1:如果所有表都包含值
1
,则
视图
必须是
删除


问题:如何通过检查上述特定条件来更改视图?

您可以使用替代触发器:

Create Trigger SX_Del On Sx Instead of delete
As 
Begin
    Delete s From s1 s Inner Join deleted d on d.Cola = s.Cola
    Delete From s2 Where cola in (Select Cola From deleted )
    Delete From s3 Where cola in (Select Cola From deleted )
End

就像视图中的每个不同选择一样,您必须为每个表定义必须删除的内容。

您可以使用替代触发器:

Create Trigger SX_Del On Sx Instead of delete
As 
Begin
    Delete s From s1 s Inner Join deleted d on d.Cola = s.Cola
    Delete From s2 Where cola in (Select Cola From deleted )
    Delete From s3 Where cola in (Select Cola From deleted )
End
就像视图中的每个不同选择一样,您必须为每个表定义必须删除的内容