我有两个表,一个联系人表和一个地址表。 地址表包含联系人ID和4个地址行。 我希望使用地址表中的信息更新联系人表。 为简单起见,让表格如下:
地址(
。 contact int not null,
。 address1 varchar(32)not null,
。 address2 varchar(32)not null
)
触点(
。 id int主键,
。 addr1 varchar(32)not null,
。 addr2 varchar(32)not null
)
如何(int tsql)从地址表中更新联系人表? 感谢。
答案 0 :(得分:5)
你没有。您的架构已损坏。您正在多个地方重复地址数据。
您的架构应该类似于
addresses(
. id int primary key,
. address1 varchar(32) not null,
. address2 varchar(32) not null
)
contacts(
.id int primary key
.addressId int foreign key (addresses.id)
}
因此,要获取联系人的地址,您可以执行以下连接:
select
c.id contactId,
a.address1,
a.address2
from
contacts c
join addresses a on
c.addressId=a.id
where
c.id=@someContactId
要更新,您将执行以下操作:
update a
set a.address1='27 Foo Street'
from
addresses as a
join contacts as c
on a.id=c.addressId
where c.id=@someContactId
在数据库中复制数据并不是一个好主意。搜索术语数据库规范化以获取有关此主题的更多信息。
答案 1 :(得分:0)
我同意'花钱' - 你不应该复制这些数据。
但是,如果必须进行批量更新,则这是您使用的T-SQL语句:
UPDATE dbo.Contacts
SET addr1 = address1,
addr2 = address2
FROM dbo.Addresses
WHERE id = contact
您只需通过定义WHERE id = contact
子句将Contacts表连接到Addresses表,然后将Contacts表上的addr1 / addr2字段设置为Addresses表中address1 / address2的相应值 - 非常简单,嗯?
马克