通过视图修改数据时所应掌握的基本准则

假如不使用INSTEAD OF触发器或可更新分区视图而是通过视图来修改数据,那么再修改之前,请考虑下列准则:

◆如果在视图定义中使用了 WITH CHECK OPTION 子句,则所有在视图上执行的数据修改语句都必须符合定义视图的 SELECT 语句中所设定的条件。如果使用了 WITH CHECK OPTION 子句,修改行时需注意不让它们在修改完成后从视图中消失。任何可能导致行消失的修改都会被取消,并显示错误信息。

◆SQL Server 必须能够明确地解析对视图所引用基表中的特定行所做的修改操作。不能在一个语句中对多个基础表使用数据修改语句。因此,列在 UPDATE 或 INSERT 语句中的列必须属于视图定义中的同一个基表。

◆对于基础表中需更新而又不允许空值的所有列,它们的值在 INSERT 语句或 DEFAULT 定义中指定。这将确保基础表中所有需要值的列都可以获取值。

◆在基础表的列中修改的数据必须符合对这些列的约束,如为空性、约束、DEFAULT 定义等。例如,如果要删除一行,则相关表中的所有基础 FOREIGN KEY 约束必须仍然得到满足,删除操作才能成功。

◆分布式分区视图(远程视图)不能使用键集驱动游标更新。此项限制可通过在基础表上而不在视图本身上声明游标得到解决。

此外,如果在视图中删除数据:

◆在视图定义的 FROM 子句中只能列出一个表。

不能在视图中与text、ntext 或 image 列一起使用 READTEXT 和 WRITETEXT 语句。

时间: 2025-01-02 13:43:40

通过视图修改数据时所应掌握的基本准则的相关文章

hibernate 修改数据时,修改前的值与修改中的值的比较

问题描述 我现在要对某条记录进行修改,在Serivce中,从action中传递过来了记录的实体,如代码:public void saveResource(Resc resource) {//要进行分开,A->是新增资源,B->修改资源 两种情况在刷新缓存情况不同boolean isNew = (resource.getResourceId() == null);String path = "";resourceDao.getSession().clear();resourc

MFC读txt数据时,数据出错

问题描述 MFC读txt数据时,数据出错 我用mfc写了一个程序用于读取数据进行一元线性回归计算,读进来的数据总会莫名其妙的出问题,比如数据是12.34,读进来就会变成12.33999999999999999或者12.340000000000001,求各路大神帮忙看看是什么回事 解决方案 你有考虑过精度问题吗? 解决方案二: 浮点数在计算机中无法精确存储,只是无限接近这个数而已比如你存储12.34也只是存储一个无限接近12.34的值(比如12.339999....)所以我们比较浮点数的时候会设置

insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以

问题描述 insert into向access插入数据时,字段名(也就是列的名字)之间有空格,去掉空格,就可以 insert into test(Image Name) values ('1233424.tif') 提示是语法错误,问题在Image Name,去掉空格就对,这是为什么??? 解决方案 如果字段名一定要包含空格的话,可以给这一字段加中括号即可正常插入. insert into 表1([Image Name]) values('1233424.tif') 解决方案二: 包含特殊字符的

Cocos2d-x数据持久化-修改数据

修改数据时涉及的SQL语句有insert.update和delete语句这3个SQL语句都可以带参数.修改数据的具体步骤如下所示.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_prepare_v2函数预处理SQL语句.(3) 使用sqlite3_bind_text函数绑定参数.(4) 使用sqlite3_step函数执行SQL语句.(5) 使用sqlite3_finalize和sqlite3_close函数释放资源.这与查询数据少了提取字段数据这个步骤其他步骤是

update-SQL 根据表A的数据修改表B,当一条表B的数据匹配到多条表A的数据时选其中一条修改

问题描述 SQL 根据表A的数据修改表B,当一条表B的数据匹配到多条表A的数据时选其中一条修改 update B set _flg = 'update', b_string1 = t4.a_string1, b_string2 = t4.a_string2, b_string3 = t4.a_string3, b_string4 = t4.a_string4, b_string5 = t4.a_string5, update_by = current_user, update_date = ge

java-jdom解析修改xml然后再查询数据时没有更新

问题描述 jdom解析修改xml然后再查询数据时没有更新 jdom解析修改xml文件然后再查询数据时,还是原来的数据没有更新,这是什么情况.

用hibernate在修改一条数据时没有覆盖旧的记录,反而添加了一条新纪录,怎么回事?

问题描述 用hibernate在修改一条数据时没有覆盖旧的记录,反而添加了一条新纪录,怎么回事? 我用的是mysql的数据库, jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML> <div class="fo

IT人员在保护企业数据时应了解的八件事

本文讲的是IT人员在保护企业数据时应了解的八件事,相信最近发生的泄库事件让所有的企业IT管理人员都如履薄冰,如何才能保护企业的敏感信息不泄漏,成了目前企业IT管理人员的必修课.以下是我们总结出来的企业IT管理人员在保护企业数据时应了解的八件事情,以供大家参考: 1.每个企业都有敏感数据.敏感数据是指你不希望未授权的人看到的数据,不论企业大小,每个企业都有这类数据.包括员工工资,银行账户,客户信用卡账户,交易机密和体检记录等. 2.数据丢失时有发生.IT行业几十年来都致力于让用户更快速更便捷地共享

C# 记录日志问题,数据库事务修改时如何便捷获取修改数据的值?

问题描述 在作"修改"功能时,需要保存4个表数据.在修改的时候,如何判断哪些数据已经修改,并把修改数据记录下来写到操作日志中. 解决方案 解决方案二:这是纯逻辑问题了保存数据的时候不判断是否有变化,无脑执行SQL?解决方案三:对你操作数据库的执行结果进行判断:成功,记录你修改的信息:失败,通行记录错误或是异常信息.解决方案四:写个存储过程比较好解决方案五:EntityFramework帮你记录啦,如果你用的话解决方案六:引用1楼Z65443344的回复: 这是纯逻辑问题了保存数据的时候