我目前正在阅读微软关于观点的文档,对于我所读到的“with check option”,我感到很困惑。文档中没有提供任何示例。有人能让我举个简单的例子吗?我通过例子更容易理解。
CHECK OPTION强制执行所有执行的数据修改语句 视图遵循select_statement中设置的条件。当一个 通过视图修改行,WITH CHECK OPTION确保 修改后,视图中的数据仍然可见 提交。
答案 0 :(得分:3)
这是否意味着您无法通过视图进行此类更新,因为视图中的where
语句与行不匹配,行将从视图中消失了。
查看:
create view xxx as select * from table where status = 1
使用表格更新(ok):
update table set status = 2 where id = 3
使用视图更新(不行):
update xxx set status = 2 where id = 3
如果你这样做,它会使行消失
答案 1 :(得分:1)
以下是显示CHECK OPTION
行为的示例。
CREATE TABLE dbo.Table1(Col1 int);
CREATE TABLE dbo.Table2(Col2 int);
INSERT INTO dbo.Table1 (Col1) VALUES(1);
INSERT INTO dbo.Table2 (Col2) VALUES(1);
GO
CREATE VIEW dbo.ViewWithCheckOption
AS
SELECT Table1.Col1, Table2.Col2
FROM dbo.Table1
JOIN dbo.Table2 ON Table1.Col1 = Table2.Col2
WITH CHECK OPTION;
GO
CREATE VIEW dbo.ViewWithoutCheckOption
AS
SELECT Table1.Col1, Table2.Col2
FROM dbo.Table1
JOIN dbo.Table2 ON Table1.Col1 = Table2.Col2;
GO
SELECT Col1, Col1 FROM dbo.ViewWithoutCheckOption; --returns 1 row
INSERT INTO dbo.ViewWithoutCheckOption(Col1) VALUES(2); --succeeds
SELECT Col1, Col1 FROM dbo.ViewWithoutCheckOption; --still returns 1 row
SELECT Col1, Col1 FROM dbo.ViewWithCheckOption; --returns 1 row
INSERT INTO dbo.ViewWithCheckOption(Col1) VALUES(2); -- fails with error
返回的错误是:
Msg 550,Level 16,State 1,Line 30尝试插入或更新 失败,因为目标视图指定WITH CHECK OPTION或 跨越指定WITH CHECK OPTION和一行或多行的视图 操作产生的结果不符合CHECK OPTION的条件 约束
答案 2 :(得分:0)
使用以下示例让我们理解
CREATE VIEW PortlandAreaAddresses_vw
AS
SELECT AddressID,
AddressLine1,
City,
StateProvinceID,
PostalCode,
ModifiedDate
FROM Person.Address
WHERE PostalCode LIKE ‘970%’
OR PostalCode LIKE ‘971%’
OR PostalCode LIKE ‘972%’
OR PostalCode LIKE ‘986[6-9]%’
WITH CHECK OPTION;
在这种情况下,如果您尝试插入记录,则CHECK OPTION将强制执行为PostalCode指定的4条规则
WHERE PostalCode LIKE ‘970%’
OR PostalCode LIKE ‘971%’
OR PostalCode LIKE ‘972%’
OR PostalCode LIKE ‘986[6-9]%’
这意味着您不能插入“ 19970”之类的邮政编码