返回首页

从SQL乔斯2赞成发展系列?SQL SERVER的提示24天35:检查选项的简单介绍吗???|
回答一个简单的测验,在博客文章 -
每天一个来自印度的优胜者将获得。使用CHECK OPTION
检查选项是一个非常方便的工具,我们可以用我们的意见。如果我给你的定义,马上和你不,AOT已经知道那是什么,然后就是混乱。不过的例子非常有意义。因此,让我们,AOS保存这个职位的定义。首先,让我们的AOS期待创造的vHighValueGrants视图。

CREATE VIEW vHighValueGrants

AS

SELECT GrantName, EmpID, Amount

FROM [Grant]

WHERE Amount > 20000

JProCo"已经提供给每个补助20000元1000美元的比赛。 1000美元的比赛是目前包括在我们vHighValueGrants金额为下面的图中看到。{S0的}
我们刚刚获悉,AOT运动没收到从利益相关者的必要的批准。因此,我们必须删除所有匹配金额1,000元。我们运行这个UPDATE语句后,补助金将全部退还其基准值。{C}
大量赠款减1,000元,从而返回到其基准值。已被删除,增加1000元,在此看到如下图:{S}
假如你不小心碰到两次递减步骤。之前我们,Äúaccidentally??运行UPDATE语句以创建这种情况下,让再次,的AOS考虑当前视图中显示的金额。最小在vHighValueGrants视图津贴为21,000元。如果我们重新运行UPDATE语句,这笔款项将成为20,000美元。回想一下,每个补助必须大于$ 20,000以视图中出现。
运行UPDATE语句,然后运行一个SELECT语句看到的在vHighValueGrants视图中的所有记录。 21,000元的补助金(6大贡献,AOS基金会%)减少至20,000元,因此下降的看法。现在,这笔款项已外落的vHighValueGrants标准,视图不再有能力,Äúsee??或使用DML语句操纵这个纪录。其余五个补助,你可以纠正他们的款项,并扭转,Äúaccidental??运行UPDATE语句的每个补助1000元递增。然而,只有这样,才能纠正缺少的补助金数额是直接对授权表运行UPDATE语句。只有5在第二次递减1000元后剩余的大量赠款。
{S2的}
这个动作明显是一个错误。我们没有,AOT打算从视图中删除一条记录,但因为它是目前配置,vHighValueGrants ISN,AOT对这类错误保护。为了防止数据更新,这将导致记录消失,我们认为,我们可以把补助表上的触发器,或者我们可以使用检查选项。
CREATE TRIGGER trg_UpdateGrant

ON dbo.[Grant]

AFTER UPDATE

AS

BEGIN

IF EXISTS( SELECT * FROM Inserted ins

INNER JOIN Deleted del

ON ins.GrantName = del.GrantName

WHERE del.Amount > 20000

AND ins.Amount <= 20000)

ROLLBACK TRAN

END

如果你创建触发器然后尝试递减的vHighValueGrants,认为"你,Äôll发现的触发将不会允许下降至20,000元的交易,从而赢得,AOT满足的vHighValueGrants视图的标准。
{S3的}
触发保护我们的观点。试图从21,000元至20,000元,减少了大批的交易被禁止,并在触发器中结束。
但是,让AOS承认的触发也将防止从任何现有的津贴,永远不能改变金额20,000元,或更低。换句话说,触发是如此的限制,即使是DBA从更新格兰特表直接将不允许的,如果改变将减少现有的资助金额,成为20,000美元或更低。触发是比我们预期的更严格。
我们的目标是简单地限制用户通过一个意外的数据变化,认为这将导致在被从视图中删除赠款。让,AOS重新尝试通过检查重建的vHighValueGrants的查看包括CHECK OPTION的选项我们的目标。
{四至}
这就告诉不允许数据通过视图的变化,这将导致任何纪录超出标准的看法。它的工作原理?现在,试图减小,虽然视图的CHECK选项将阻止你。使用下面的代码,你会得到以下错误消息:{体C3}
消息550,级别16,状态1,行1
尝试插入或更新失败,​​因为目标视图指定了WITH CHECK OPTION或跨越的某一视图指定CHECK OPTION和操作造成的,不符合CHECK OPTION约束下的一个或多个行。
语句已终止。
不过,您将被允许直接更新表。
在这里确定为承诺的是短期的定义或意见做哪些检查选项的描述。每对视图执行DML语句时,CHECK OPTION验证,将是真正建立视图的SELECT语句产生的记录集。如果修改将删除视图定义的记录,然后检查选项可防止致力于交易。
注:如果您想您的系统上设置样品JProCo数据库,你可以看这个{A}。对于这个职位,你会想从第4卷SQLProgrammingChapter5.1Setup.sql脚本运行。问题23
你有名为dbo.Sales表。您需要创建三个从销售表的意见。{C5的}
每个视图将用于各地区,使他们行的变化。一天,在西雅图的销售经理更新了自己的销售数据,有一个新的LocationID和记录显示上vSalesBoston视图。不得变更的vSalesSeattle视图的方式,记录落在视图范围之外。你应该创建哪些视图区域吗?{5233}{C7-}{C8的}
CREATE VIEW dbo.vSalesSeattle

WITH NOCHECK

AS

SELECT SalesID, OrderQty, SalespersonID, RegionID

FROM dbo.Sales

WHERE RegionID = 1
规则 请留下你的答案与下面的正确选择,解释和贵国居住在注释部分。每天,一个优胜者将宣布来自美国。每天一个优胜者将宣布从印度。一个有效的答案必须包含回答者居住国。得奖者姓名及正确答案,请我的{A2的}。每天,来自印度的获胜者将得到{A3的}。每天一个来自美国的冠军将获得{A4纸}。比赛是开放的,直到下一个博客文章显示} {A5的,这是第二天勤益2.5。
参考:,皮纳尔戴维({A6的})

回答