好的,所以你有这样的工作。您插入从tmp目录表,其中设备号码和帐号丢失一张桌子SQL删除当列a和列b不存在
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%肯定,它需要被分配到新帐户导入文件句柄分配):
DELETE FROM ClientEquipments
WHERE (clientEquipmentId =
(SELECT clientEquipmentId
FROM ClientEquipments AS ClientEquipments_1
WHERE (equipmentNumber = '0CAEC6')))
- 如果什么都不存在,则插入一个新行。
:::编辑一些更多的信息来帮助我:::
我读一个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有两个设备编号。
在这里,我将新账户到dbo.clients做从dbo.clients_temp查询到dbo.clients
然后我更新与dbo.clients_temp新的信息dbo.clients(即账户1234的威力,但存在现在他们有一个新的地址。)
既然我的dbo.clients表更新了新的客户端,并为现有客户端提供了新信息,我需要更新我的dbo.equipments表。我原本是在做你上面看到的,插入不存在的帐号和设备号码。
现在的问题是,由于设备会更改帐户,例如,帐户号码5678可能已变为不活动状态,我不会在数据库级别跟踪或关心,但设备号码现在可能属于帐户号码1234 。在这种情况下,我的原始查询将在数据库中插入一个新行,因为帐户1234和设备编号不会在SELECT中返回。
好吧,我已经失去了这种现在:PI会尝试,后来重温上周末的问题,因为我只是我自己弄得乌
现在我重读了几次就更有意义了。有没有什么办法可以先从给定的设备上运行删除操作,然后运行你在问题顶部的插入语句? 基本上,您将运行DELETE FROM ClientEquipments WHERE clientEquipmentId IN(SELECT EquipmentNumber FROM clientspaymenttemp)。因此,在加载新记录之前,您需要删除所有旧记录。然后,当您运行插入语句时,设备应与正确的帐户相关联。 只有一个问题,设备可以分配给多个帐户吗? – 2009-11-20 20:57:18
啊,我明白你在说什么......但是有一个问题,那就是有一个日期字段,它被保存在同一张表中以跟踪设备注册的时间。如果有必要,我将不得不在周一仔细检查。不,每台设备都可以重新分配,但不会同时分配给多个客户端。 – jesusOmar 2009-11-21 19:47:36