好的,所以你有這樣的工作。您插入從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