用于在不同表中存储值的唯一查询

时间:2011-03-16 14:11:52

标签: sql-server-2005 unique

我想编写一个唯一的查询来在不同的表中存储相同的值 例如: 我有aa和bb tables.with属性no,地址,phoneno,城市。 在这个和没有和城市是相同的,剩下的是不同的。     在两个表中,一些属性是唯一的,一些属性是不同的 我想在sql server中使用一个查询更新2个表。

1 个答案:

答案 0 :(得分:2)

为了实现这一目标,您必须获得比简单查询更高级的功能。我的建议是你可能应该规范化你的设计,把数字和城市放在一个单独的表中,然后简单地链接到另外两个表中的这个表。

通常,您不应将信息复制到多个表中。但是也有例外。


但是你没有征求意见,所以你可能有理由按照你的要求去做。如果这仍然是您想要关闭的路径,则您的选项取决于您使用的SQL的风格。在许多SQL平台上,您可以使用存储过程完成此操作。在某些情况下,您可以使用视图,触发器和存储过程。我会给你一个每个选项的快速概要。

- 存储过程 编写一个或多个存储过程(可能每个用于插入,更新,删除)这些过程将您的值作为参数。然后,procs依次对每个表运行查询。

- 存储过程+查看+触发 (您可以在MS SQL服务器上执行此操作,但我不确定其他人。)在此创建一个合并两个表的视图。 (加入您的公共字段。)这为您提供了一个基本上连接在一起的两个表的视图。现在,由于此视图基于两个表,因此它变为不可更新的视图。但是,您可以将存储过程附加到视图以进行插入,更新和删除操作。在这里你做与第一种方法相同的事情,你创建了几个proc来实际更新视图下两个表中的数据。这些过程略有不同,因为这些过程需要设计为触发器。然后,将这些过程附加到视图的插入,更新或删除触发器。完成所有操作后,您应该能够直接在视图上插入,更新或删除数据,并查看基础表中的更改。


如果所有看起来真的很复杂,那都是因为它。如果您有其他选项,例如规范化数据结构以解决问题,则应首先尝试。如果您真的没有选择并且触发器可用,则第二选项非常有效。