使用来自另一个表的外键将数据插入或更新到表中

时间:2019-02-28 07:17:05

标签: sql sql-server

有两个表

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,但是它无法更新/插入外键主表。

2 个答案:

答案 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)

您可以按照以下特定顺序分两个步骤进行操作:

  1. 使VendorMaster表与新供应商保持最新。我假设供应商名称是您的键(尽管它不应该是名称,如果您有两个具有相同名称的不同供应商会发生什么?),而VendorIDIDENTITY。 / 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)
    
  2. 更新(如果存在)并插入(如果不存在)来自每个供应商的数据。我假设此表上的键将是VendorIDProductName(它不应该是产品名称,应该是ProductID等),而{{1 }}是DataID。操作必须按照此特定顺序进行,以防止无意义的更新。如果更新不存在,则更新不会更新;如果已经存在,则插入内容也不会插入:

    IDENTITY