数据表窗体的数据修改问题

xs0573 2010-07-30 09:58:51
请问,以联合查询做数据源是不是不可以进行修改,如果可以,应该如何处理,不可以的话,有什么替代方法
我这里有两张表
入库表 : 品名,入库量
出库表 : 品名,出库量
原先联合查询sql语句如下
ALTER FUNCTION dbo.记帐
(@品名 nvarchar(20))
RETURNS TABLE
AS
RETURN ( SELECT 品名, 入库量, 0 AS 出库量
FROM dbo.入库表
WHERE (品名 = @品名)
UNION
SELECT 品名, 0 AS 入库量, 出库量
FROM dbo.出库表
WHERE (品名 = @品名) )
要做的效果是可以在一个数据表窗体上看到同品名的所有入库,出库数据,并且如果是入库数据可以修改入库量,出库数据可以修改出库量
原先的函数只能做到前一步,单无法修改,还请哪位专家指点下
...全文
317 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xs0573 2010-07-30
  • 打赏
  • 举报
回复
谢谢shmilywcd的指点,我刚学sql数据库不久,很多都不懂
我想问下,你说的是通过存储过程或程序里进行修改吗
我是想能够以函数或视图作为数据表窗体来源,可以在窗体的每一条数据里面直接对某一个字段进行修改
天-笑 2010-07-30
  • 打赏
  • 举报
回复
通过视图修改数据

可修改视图是指可以使用插入、更新和删除操作来改变基础表中数据的视图。对可修改表做的任何变化都将明确地传递到基础表。视图的插入、更新和删除语法与表的相同,参见第10章。

不可修改(只读)视图是不支持插入、更新和删除操作的视图,因为对数据的改动可能是含糊不清的。要改变出现在只读视图的数据,必须直接修改基础表(或通过其他可修改视图)。

可修改视图的每一行都和基础表的一行相关联。如果视图的SELECT语句使用了GROUP BY、HAVING、DISTINCT或聚合函数等,视图就成为不可更新的。

SQL-92规定可更新视图只能定义在一张表上,这样过于严格但很安全。SQL:1999放宽了限制,因为存在样式繁多的可更新视图。随着标准的发布,DBMS供应商扩展了可更新视图。单一表视图总是可更新的。DBMS检查基础表的联结和多表视图的引用完整性约束来决定视图是否可更新。以下这些类型的查询可以定义为可更新的视图。

l 一对一内联结

l 一对一外联结

l 一对多内联结

l 一对多外联结

l 多对多联结

l UNION和EXCEPT查询

本节的例子使用仅引用一个基础表的可更新视图。请查阅DBMS文档了解哪种多表视图是可更新的,以及它们的更新如何影响到每个基础表。

13.3.1 通过视图插入行

视图ny_authors由来自纽约州作者的ID、名字和州名组成(代码13-12和图13-7)。ny_authors仅引用基础表authors。

代码13-12 创建和显示视图ny_authors,列出来自纽约州作者的ID、名字和州,结果见图13-7

CREATE VIEW ny_authors

AS

SELECT au_id, au_fname, au_lname, state

FROM authors

WHERE state = 'NY';

SELECT *

FROM ny_authors;



图13-7 运行代码13-12的结果:视图ny_authors

代码13-13通过视图插入一个新行。DBMS向表authors插入一个新行。行的au_id列是A08,au_fname是Don,au_lname是Dawson,state是NY。行的其他列——phone、address、city和zip设置为空值(或它们的默认值,如果默认值存在)。

代码13-13 通过视图ny_authors插入一个新行

INSERT INTO ny_authors

VALUES('A08','Don','Dawson','NY');

代码13-14类似于代码13-13,通过视图插入行。但这次新作者来自加州,而不是纽约,它违反了视图定义的WHERE条件。DBMS是插入行还是取消操作?这取决于视图是如何创建的。在本例中,因为CREATE VIEW语句(见代码13-12)没有WITH CHECK OPTION子句,于是DBMS并不强制保持与视图最初定义的一致性,插入是允许的。要了解更多WITH CHECK OPTION的知识,请参见13.1节的DBMS提示。如果ny_authors如下定义所示,DBMS将取消插入。

CREATE VIEW ny_authors

AS

SELECT au_id, au_fname, au_lname,

state

FROM authors

WHERE state = 'NY'

WITH CHECK OPTION;

代码13-14 通过视图ny_authors插入一个新行。如果创建ny_authors时使用了WITH CHECK OPTION,DBMS将取消插入

INSERT INTO ny_authors

VALUES('A09','Jill','LeFlore','CA');

13.3.2 通过视图更新行

代码13-15通过视图更新了已存在的行。DBMS将作者名字由Sarah Buchman变为Yasmin Howcomely,更改了表中authors作者A01所在行。这行的其他列值——au_id、phone、address、city、state和zip并无变化。

代码13-15 通过视图ny_authors更新已存在的行

UPDATE ny_authors

SET au_fname = 'Yasmin',

au_lname = 'Howcomely'

WHERE au_id = 'A01';

假定代码13-15如下。

UPDATE ny_authors

SET au_fname = 'Yasmin',

au_lname = 'Howcomely',

state = 'CA'

WHERE au_id = 'A01';

这个语句与代码13-14有同样的问题:所需要的变化会使Yasmin行不再满足视图成员资格的条件,DBMS是接受还是取消修改,取决于视图创建时是否指明WITH CHECK OPTION子句。如果使用了WITH CHECK OPTION,行无法以会使它们从视图上消失的方法修改。

l 有些计算导出列可以更新(理论上)。例如,视图包含列bonus,bonus = 0.1 * salary,应该能够修改bonus而使SQL应用反函数(bonus/0.1)来更新基础表中的salary。其实这是不可行的,因为SQL无法反向更新导出列。

l 对于复杂的可更新视图,一种操作可以包含另一种操作。例如,视图更新可能包含插入新的基本表行。

q


为了在Microsoft SQL Server中运行代码13-12,请删除CREATE VIEW语句结束的分号,并分别运行两条语句。

MySQL 5.0及之后版本支持视图。之前版本无法运行本节的代码。

PostgreSQL没有提供可更新视图,但可以利用它的规则系统通过定义ON INSERT、ON UPDATE和ON DELETE的规则来创建可更新视图的影像(illusion)。查阅PostgreSQL文档的CREATE RULE或rule system部分。

对于所有的DBMS,查阅文档了解DBMS如何处理可更新视图中自动产生唯一行标识符的列,参见3.12节。

13.3.3 通过视图删除行

代码13-16通过视图删除一行。DBMS删除了表authors中作者A05所在的行。(行的每一列都删除了,不只是出现在视图中的列)。接下来,行从视图ny_authors中消失了。

代码13-16 通过视图ny_authors删除行

DELETE FROM ny_authors

WHERE au_id = 'A05';

视图更新会影响完整性。如果删除行影响到完整性约束,DBMS不允许删除,参见11.7节。如果删除行后,所有相关基础表的外键约束仍满足,则删除成功。一些更新能够在外键约束有CASCADE选项(如果指明)的情况下执行,而不是通过视图定义。

例如,在代码13-16中,如果没有首先改变或删除表title_authors中指向的表authors中作者A05的外键值,DBMS就会取消删除。

ü提示

l 可更新的视图必须包含基础表的键来保证每个视图行指向基本表的一行。

l 可更新视图不包含的列必须可以为空或在基础表有一个默认值,以便DBMS能够在插入行时构建整行。

l 更新值必须符合基础表列的限制,如数据类型、可否为空及其他约束。

xs0573 2010-07-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 shmilywcd 的回复:]
把函数修改成视图,可修改试图可以满足你的想法
[/Quote]
已经试过了,修改成视图后,也是无法修改数据的


表的结构: 入库表 : 字段:品名 ,字段:入库量 ,字段:单号
出库表 : 字段:品名 ,字段:出库量 ,字段:单号

数据表窗体结构:
品名 单号 入库量 出库量
结果的话比方说最后窗体显示记录
品名 单号 入库量 出库量
甲醇 1211 1 0
甲醇 5421 0 2
如果用联合查询的话,可以做到,但是无法修改数据,请问有什么好的办法
xs0573 2010-07-30
  • 打赏
  • 举报
回复
好的,我试下
天-笑 2010-07-30
  • 打赏
  • 举报
回复
把函数修改成视图,可修改试图可以满足你的想法
华夏小卒 2010-07-30
  • 打赏
  • 举报
回复
不清楚,到底要怎么修改

给表结构,记录,结果

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧