有两个表
Table VendorMaster
|VendorID|Vendor|
| 1 |Vendor1|
| 2 |Vendor2|
Table Data
|DataID|VendorID|ProductName|Quantity|
| 1 | 1 | Product1 | 100 |
| 2 | 1 | Product2 | 200 |
| 3 | 2 | Product1 | 400 |
| 4 | 2 | Product2 | 100 |
一个供应商可以拥有多个使用外键引用的产品 现在,我还有另一个表用于暂存数据
Table Staging
|StagingID|Vendor|ProductName|Quantity|
我需要将数据从暂存表插入或更新到数据表和供应商表中。像登台表一样,可用于仅更新数量或添加新的供应商和/或产品。
我该如何进行?我正在使用SQL Server。
我尝试使用this,但是它无法更新/插入外键主表。
答案 0 :(得分:3)
您需要编写以下代码来插入和更新相应的表,并且我假设VendorID和DataID列是标识列。
List<Observable<Object>> listObservables = new ArrayList<>();
//Adding initial request
Observable<Object> testObservable = RetrofitFactory.create().startProcess();
listObservables.add(testObservable);
Observable.concatDelayError(listObservables).subscribe(response ->
{
//This is where all results should be managed
Log.d("response", String.valueOf(response));
},
error ->
{
Log.d("response", String.valueOf(error));
});
//Actual request occurs much later in application
listObservables.get(0).subscribeOn(Schedulers.io()).
observeOn(AndroidSchedulers.mainThread()).subscribe(response ->
{
// the response of this, should notify concatDelayError
Log.d("respoonse", String.valueOf(response));
});
答案 1 :(得分:1)
您可以按照以下特定顺序分两个步骤进行操作:
使VendorMaster
表与新供应商保持最新。我假设供应商名称是您的键(尽管它不应该是名称,如果您有两个具有相同名称的不同供应商会发生什么?),而VendorID
是IDENTITY
。 / p>
INSERT INTO VendorMaster (
Vendor)
SELECT DISTINCT
S.Vendor
FROM
Staging AS S
WHERE
NOT EXISTS (SELECT 'vendor not yet loaded' FROM VendorMaster AS V
WHERE V.Vendor = S.Vendor)
更新(如果存在)并插入(如果不存在)来自每个供应商的数据。我假设此表上的键将是VendorID
和ProductName
(它不应该是产品名称,应该是ProductID
等),而{{1 }}是DataID
。操作必须按照此特定顺序进行,以防止无意义的更新。如果更新不存在,则更新不会更新;如果已经存在,则插入内容也不会插入:
IDENTITY