如何更新主表中依赖于3字段的外键

时间:2017-11-25 15:01:37

标签: sql-server

之前我有一个类似的问题,更新外键取决于主表中的2个字段,how to update foreign key

在我的数据库中得到答案和测试后,我看到它没有解决我的问题,实际上我收到的答案假设每个Doc No,Sheet No,我有类似的Line no(带有前导空格或没有前导空格)但是在我的数据库中,我有不同的行号,每个Doc No,Sheet No(正如我在我的问题中编辑的那样)所以我修改了我的问题和样本数据如下所示获得新答案:

我有2张桌子;第一张表的设计如下:

表1

    id_Doc_line_sheet (pk),Autonumber
    DocNo (text)
    lineNo (text)
    Sheet No (text)

字段组合(DocNo,lineNo,Sheet No)是索引和唯一。

第二张表的设计如下:

表2

  id_Doc_line_trans (pk), Autonumber
  id_Doc_line_sheet (fk),Number
  name

现在在table1中,对于field lineNo,我有带前导空格的记录,没有前导空格,如下所示:

  id_Doc_line_sheet            DocNo        lineNo      Sheet No    
  ------------------------------------------------------------------
  1001                         doc-0001    line-0001    1
  1002                         doc-0001     line-0001   1
  1003                         doc-0001    line-0001    2
  1004                         doc-0001     line-0001   2
  1005                         doc-0002    line-0002    1
  1006                         doc-0002     line-0002   1
  1007                         doc-0001    line-0005    1
  1008                         doc-0001     line-0005   1

我希望用前导空格删除这些记录,但首先我想为每个唯一(DocNo,lineNo,Sheetno)更新(id_Doc_line_sheet)以更正一个(没有前导空格)。  我的意思是如果table2如下所示:

    id_Doc_line_trans     id_Doc_line_sheet     name
    ---------------------------------------------------
     1                        1001              name01
     2                        1002              name02
     3                        1003              name03
     4                        1004              name04
     5                        1007              name07
     6                        1008              name08

我将(id_Doc_line_sheet)更新为以下内容:

id_Doc_line_trans     id_Doc_line_sheet     name
---------------------------------------------------
 1                     1001                name01
 2                     1001                name02
 3                     1003                name03
 4                     1003                name04
 5                     1007                name07
 6                     1007                name08

然后从第一个表中删除带有前导空格的记录。

请帮助我怎么做?

0 个答案:

没有答案