使用同一列更新多个表

时间:2016-01-27 18:11:07

标签: sql sql-server

我在我的数据库中更新了我诊所所在位置的值。现在我在多个表中有clinic列,表示他们所在的城市。目前有35个,它被压缩成无空格字符串(IE:FortSmith)。我想用不同的格式追溯调整每个值,然后使用我的附加格式继续使用该格式。

UPDATE transactions
SET clinic='07 - Fort Smith'
WHERE clinic='FortSmith'

更新很简单,但我有35个不同的位置和共享此列的大量表clinic我是否有任何方法可以对列clinic的所有表进行此测试更新它适用的地方?

2 个答案:

答案 0 :(得分:5)

解决您的需求,而不是您的确切问题,解决方案是规范化。

创建一个Clinic表,其中包含唯一的数字ClinicId和varchar ClinicName。

具有诊所列的所有表格应该具有ClinicId,它是引用Clinic表的ClinicId的外键。

从预先存在的表中选择Clinic列的所有查询都需要更改为包含表Clinic的JOIN,以获取ClinicName列。

收益是当诊所的名称发生变化时,您只需要在Clinic表中更改它,而不是在35个不同的表中。通过加入诊所表获取诊所名称的所有查询将自动获取新的诊所名称,而无需您做任何额外的工作。

非正规化可能有正当理由,但权衡是你现在面临的问题。标准化数据库设计,或每次需要更改诊所名称时执行35个查询。

答案 1 :(得分:0)

您可以使用以下语句为所有此类表生成更新,然后复制这些语句并执行它们。

select 'UPDATE [' + o.[name] +
        '] SET clinic=''07 - Fort Smith''
        WHERE clinic=''FortSmith'''
from sys.objects o inner join sys.columns c on o.object_id = c.object_id
where c.[name] = 'clinic'