【发布时间】:2009-11-24 04:50:51
【问题描述】:
好的,所以你有这样的工作。您从 tmp 表中插入到表中,其中缺少设备号和帐号...
Insert INTO ClientEquipments(
SUB_ACCT_NO_SBB,
EquipmentDate,
EquipmentText,
EquipmentNumber)
Select
replace(a.SUB_ACCT_NO_SBB,'"','') as SUB_ACCT_NO_SBB,
getdate() as edate,'' as etext,
replace(a.equipmentNumber,'"','') equipmentNumber
from clientspaymenttemp a
where not exists
(select b.equipmentNumber
from clientEquipments b
where b.sub_acct_no_sbb=replace(a.SUB_ACCT_NO_SBB,'"','') and b.equipmentNumber=replace(a.equipmentNumber,'"',''))
group by SUB_ACCT_NO_SBB,equipmentNumber
但是发现一个问题,如果之前设备号属于不同的账号,那么我之前的查询会插入一个新的行,设备号相同,但是一个新的账号。
我需要它做的很简单:
- 如果存在帐号和设备号,则无需插入。
- 如果设备编号存在,但已分配给不同的帐号,请删除旧行。 (导入文件处理分配,所以我 100% 确定它需要分配给新帐户)
Something Like this 添加在之前的代码中:
DELETE FROM ClientEquipments
WHERE (clientEquipmentId =
(SELECT clientEquipmentId
FROM ClientEquipments AS ClientEquipments_1
WHERE (equipmentNumber = '0012345CAEC6')))
- 如果不存在,则插入新行。
:::编辑更多信息以帮助我:::
我正在读取一个 CSV 文件:
样本数据:
Account | Name | Address | Some Extra Stuff | Equipment Number
"1234","First1,Last1","Address 1",etc etc... "ENum1234"
"1234","First1,Last1","Address 1",etc etc... "ENum5678"
"5678","First2,Last2","Address 2",etc etc... "ENum9123"
"9123","First3,Last3","Address 3",etc etc... "ENum4567"
这会被批量导入到临时表中。 (dbo.clients_temp)
请注意帐户 1234 有 2 个设备编号。
从这里我通过从 dbo.clients_temp 到 dbo.clients 的查询将新帐户插入到 dbo.clients
然后我使用来自 dbo.clients_temp 的新信息更新 dbo.clients(即帐户 1234 可能存在,但现在他们有一个新地址。)
现在我的 dbo.clients 表已经更新了新客户,以及现有客户的新信息,我需要更新我的 dbo.equipments 表。我最初是在做你在上面看到的,在不存在的地方插入帐号和设备号。
现在的问题是,由于设备确实会更改帐户,例如,帐号 5678 可能已变为非活动状态,我在数据库级别不跟踪或关心,但设备号现在可能属于帐号 1234。在这种情况下,我的原始查询将在数据库中插入一个新行,因为 SELECT 中没有返回 Account 1234 和 Equipment Number。
好的,我现在已经失去了这个:P 我会尝试在周末晚些时候重新审视这个问题,因为我只是把自己弄糊涂了 O.o
【问题讨论】:
-
现在我重新阅读了几次,这更有意义。有什么方法可以先从给定设备运行删除,然后运行问题顶部的插入语句?基本上,您将运行 DELETE FROM ClientEquipments WHERE clientEquipmentId IN (SELECT EquipmentNumber FROM clientspaymenttemp)。因此,您将在加载新记录之前删除所有旧记录。然后,当您运行插入语句时,设备应该与正确的帐户相关联。就一个问题,设备可以分配给多个账号吗?
-
啊,我明白你在说什么...但是有一个问题,有一个日期字段,它保存在同一个表中以跟踪设备注册发生的时间.如果有必要,我将不得不在星期一仔细检查。不,每台设备都可以重新分配,但绝不会同时分配给多个客户。
标签: sql