我在我的数据库中更新了我诊所所在位置的值。现在我在多个表中有clinic
列,表示他们所在的城市。目前有35个,它被压缩成无空格字符串(IE:FortSmith)。我想用不同的格式追溯调整每个值,然后使用我的附加格式继续使用该格式。
UPDATE transactions
SET clinic='07 - Fort Smith'
WHERE clinic='FortSmith'
更新很简单,但我有35个不同的位置和共享此列的大量表clinic
我是否有任何方法可以对列clinic
的所有表进行此测试更新它适用的地方?
答案 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'