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

Sql server 2005 用于在不同表中存储值的唯一查询,sql-server-2005,unique,Sql Server 2005,Unique,我想写一个唯一的查询,在不同的表中存储相同的值 前任: 我有aa和bb表。具有属性no、address、phoneno、city。 在这方面,no和city都是相同的,其余的都是不同的。 在这两个表中,有些属性是唯一的,有些是不同的 我想在sql server中使用一个查询来更新这两个表。要实现这一点,您需要比一个简单的查询更高级一些。我的建议是,您可能应该规范化您的设计,将数字和城市放在一个单独的表中,然后简单地链接到其他两个表中的这个表 一般来说,不应将信息复制到多个表中。但也有例外 然而

我想写一个唯一的查询,在不同的表中存储相同的值 前任: 我有aa和bb表。具有属性no、address、phoneno、city。 在这方面,no和city都是相同的,其余的都是不同的。 在这两个表中,有些属性是唯一的,有些是不同的
我想在sql server中使用一个查询来更新这两个表。

要实现这一点,您需要比一个简单的查询更高级一些。我的建议是,您可能应该规范化您的设计,将数字和城市放在一个单独的表中,然后简单地链接到其他两个表中的这个表

一般来说,不应将信息复制到多个表中。但也有例外


然而,你没有征求意见,所以你可能有理由按照你要求的方式去做。如果这仍然是您想要走的路,那么您的选项取决于您使用的SQL的风格。在许多SQL平台上,您可以通过存储过程来实现这一点。在某些情况下,可以使用视图、触发器和存储过程。我将为您简要介绍每种选择

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

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



如果这一切看起来真的很复杂,那是因为它确实很复杂。如果您有其他选择,比如规范化数据结构来解决问题,那么您应该先尝试一下。如果你真的没有选择,并且触发器可用,那么第二个选项工作得非常好

无法使用一条
update
语句更新两个表。但是您可以创建一个存储过程来实现这一点,即执行两个单独的更新。您可以给我过程语法
create Procedure